HDOJ 1028 母函数分析
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int c1[10000],c2[10000];
int i,j,k;
int n;
while(cin>>n)
{
memset(c1,0,sizeof(c1));
memset(c2,0,sizeof(c2));
for(i=0;i<=n;i++) c1[i]=1;//对第一个括号内函数系数初始化
for(i=2;i<=n;i++)//从第二个括号开始进行括号合并(n个括号),循环多少次即要做多少次乘法
{
for(j=0;j<=n;j++)//对第一个括号进行循环相乘,系数大于N的都对结果无影响(j为第一个括号的系数)
{
for(k=0;k+j<=n;k+=i)//对第二个人括号循环相乘,系数之和(即k+j)大于N的可以忽略不计(k为第二个括号的系数)
{
c2[j+k]+=c1[j]*1;//系数为J的次数与系数为K的次数的系数之积赋值于结果
}
}
for(j=0;j<=n;j++)//将结果赋值到C1(即运算中的前一个括号)
{
c1[j]=c2[j];c2[j]=0;
}
}
cout<<c1[n]<<endl;
}
return 0;
}