哈,第二道母函数的题目,哎,不过那是因为函数比较明显
G(x)=(1+x+x^2+x^3……+x^300)*(1+x^4+x^8+……)*……(1+x^289)直接模拟咯#include<iostream>
#include<algorithm>
#include<string>
#define maxn 310
using namespace std;
int p[18]={0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289};
int num[maxn+1],num1[maxn+1];
void init()
{
memset(num,0,sizeof(num));
for(int i=0;i<=maxn;i++)
num[i]=num1[i]=1;
for(int i=2;i<=17;i++)
{
for(int j=1;j*p[i]<=maxn;j++)
for(int k=0;k<=maxn;k++)
{
int t=k+j*p[i];
if(t>maxn)break;
num1[t]+=num[k];
}
for(int j=0;j<=maxn;j++)
num[j]=num1[j];
}
}
int main()
{
int n;
init();
while(scanf("%d",&n)==1 && n)
{
printf("%d\n",num[n]);
}
return 0;
}