http://acm.hdu.edu.cn/showproblem.php?pid=1398
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 int main() 3 { 4 int n,i,j,k; 5 int sum[305]; 6 int temp[305]; 7 while(~scanf("%d",&n),n) 8 { 9 10 11 for(i=0;i<=n;i++) 12 { 13 sum[i]=1; 14 temp[i]=0; 15 } 16 for(i=2;i*i<=n;i++) 17 { 18 19 for(j=0;j<=n;j++) 20 { 21 for(k=0;j+k<=n;k+=i*i) 22 { 23 temp[j+k]+=sum[j]; 24 } 25 } 26 for(j=0;j<=n;j++) 27 { 28 sum[j]=temp[j]; 29 temp[j]=0; 30 } 31 } 32 printf("%d\n",sum[n]); 33 } 34 }