代码
#include<bits/stdc++.h>
using namespace std;
#define mxn 301
int main(){
int n,a[mxn],b[mxn],c[18];
for(int i=1;i<=17;i++)c[i]=i*i;
while(scanf("%d",&n)&&n!=0){
memset(a,0,sizeof a);
memset(b,0,sizeof b);
for(int i=0;i<=n;i++)a[i]=1;
for(int i=2;i<=17;i++){
for(int j=0;j<=n;j++)
for(int k=0;k+j<=n;k+=c[i])
b[j+k]+=a[j];
for(int j=0;j<=n;j++)a[j]=b[j],b[j]=0;
}
printf("%d\n",a[n]);
}
return 0;
}