hdu 1398母関数
669 ワード
#include<iostream>
using namespace std;
int X[18],c1[301],c2[301];
int main()
{
int i,j,num,sum;
for(i=1;i<=17;i++) X[i]=500;
// printf("!!!!!!!!
");
while(scanf("%d",&sum),sum)
{
memset(c1,0,sizeof(c1));memset(c2,0,sizeof(c2));
for(i=0;i<=300;i++) c1[i]=1;
for(i=2;i<=17;i++)
{
for(j=0;j<=sum;j++)
{
if(c1[j])
for(num=0;num<=X[i];num++)
{
if(num*i*i+j<=sum) c2[num*i*i+j]+=c1[j];
else break;
}
}
for(j=0;j<=sum;j++)
{
c1[j]=c2[j];
c2[j]=0;
}
}
printf("%d
",c1[sum]);
}
return 0;
}