题目大意:一个数n,可以用1,2^2,3^2,4^2……17^2,组合,有多少种组合;原题:点击打开链接
题目解析:运用母函数模板,简单搞定;形式:(1+x^4+....+x^(4*n))(1+x^9+....X^(9*n))……(1+x^17+……+x^(17*n))
错误分析:第三个循环k,应该为k+j<=n;不是k<n,否则会造成segment fault;
#include<stdio.h>
#include<iostream>
using namespace std;
#define M 305
int n;
int a1[M],a2[M] ;
int init()
{
int i,j,k;
scanf("%d",&n);
if(n==0)return 0;
for(i=0;i<=n;i++)//对于每个数都可以只由1组合而成,所以每个数都至少有一种组合;即:表达式:(1+x+.....+x^n)
{
a1[i]=1;
a2[i]=0;
}
for(i=2;i<=17;i++)//然后就是4,9,16……,i控制第几个表达式
{
for(j=0;j<=n;++j)//j表示第i个表达式中第j个数
for(k=0;k+j<=n;k+=i*i)//k表示第j个数的指数
{
a2[j+k]+=a1[j];
}
for(j=0;j<=n;++j)
{
a1[j]=a2[j];
a2[j]=0;
}
}
printf("%d\n",a1[n]);
return 1;
}
int main()
{
while(init());
return 0;
}