好痛苦啊!做的题也有一定数目了,可是好像是各个散落的点一样,找不到一条线把他们连起来。这道题的思路想到了,可就是中间的那个for循环想不出来。要注重抽象的本质东西,还要总结思路
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int main()
{
int n;
int dp[300];
int c[20];
int i,k;
memset(dp,0,sizeof(dp));
for(i=1;i<=17;i++)
c[i]=i*i;
dp[0]=1;
for(i=1;i<=17;i++)
{
for(k=c[i];k<=300;k++)
{
dp[k]+=dp[k-c[i]];
}
}
while(scanf("%d",&n)&&n)
{
printf("%d\n",dp[n]);
}
return 0;
}