模板直接用用....
#include<stdio.h>
#include<string.h>
int money[17];
int c1[3000],c2[3000];
void init()
{
int i;
money[0] = 1;
for(i=1;i<=17;i++)
money[i-1]=i*i;
}
int main()
{
int i,k,j;
int m,n;
init();
while(scanf("%d",&n)&&n)
{
memset(c2,0,sizeof(c2));
memset(c1,0,sizeof(c1));
for(i=0;i<=n;i++)
{
c1[i]=1;
}
for(i=1;i<17;i++)
{
for(j=0;j<=n;j++)
{
for(k=0;k+j<=n;k+=money[i])
c2[k+j] += c1[j];
}
for(j=0;j<=n;j++)
{
c1[j] = c2[j];
c2[j] = 0;
}
}
printf("%d\n",c1[n]);
}
return 0;
}