哈,第二道母函数的题目,哎,不过那是因为函数比较明显
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; }