题目链接:HDU 4982 Goffi and Squary Partition
题意:给出n和k,和为一个平方数的k-1个各不相同的数,在加上一个数(这个数也和k-1个数不同),他们总和等于n,求是否存在这样的序列。
思路:枚举平方数。构造最小的序列当然从1开始。
AC代码:
#include
int k,n;
bool judge(int sum,int lef)//sum前k-1项和,lef剩下。sum+lef=n
{
if(lef==0 || 2*sum<(k-1)*k)
return false;
if(sum==1 && lef==1)
return false;
int x,ss;//ss为前k-2项和
ss=0,x=0;
for(int i=0;i
x x++;//改变k-2项的值 //前k-2都是紧密排列的,如果(k-1),(k-2),lef相等,至少要移动2个位置才能满足要求。 if(temp==x && temp==lef)//k-2项+1等于k-1项等于lef return false; if(temp==x+1 && temp==lef)//k-2项+2等于k-1项等于lef return false; return true; } int main() { int i; int lef; while(scanf("%d %d",&n,&k)!=EOF) { int flag=0; for(i=1;i*i<=n;i++) { lef=n-i*i; if(judge(i*i,lef)) break; } if(i*i<=n) printf("YES\n"); else printf("NO\n"); } return 0; }