一典型的母函数问题:在我的资源:《组合数学》一书中理论讲解的很详细,这里给出具体的实现!其实也就是一个模板,弄清每一层循环的意义就可以了!
#include <iostream>
#include <string.h>
using namespace std;
#define MAX 300
int c1[MAX];
int temp[MAX];
int main()
{
int m;
int end;
int i,j,k;
while(cin>>m,m)
{
for(i=1;;i++)
{
if(i*i>m)
break;
}
end=i-1;
for(i=0;i<=m;i++)
{
c1[i] = 1;
temp[i] = 0;
}
for(i=2;i<=end;i++)//i表示第几个多项式
{
for(j=0;j<=m;j++)//j表示前一多项式中的第几项,值得注意的是,c1[],temp[]保存的是系数,j,k指的是指数
for(k=0;k+j<=m;k+=i*i)//k+=i*I;第k项的步长为i*i
temp[k+j]+=c1[j];//这里模拟的乘法,两项相乘,相当于在新的项的基础上加上乘积的系数
for(j=0;j<=m;j++)
{
c1[j] = temp[j];
temp[j] = 0;
}
}
cout<<c1[m]<<endl;
}
return 0;
}
这里的母函数的实现完全可以作为一个模板~