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;
}

posted @ 2013-12-11 21:53  ACalvin  阅读(221)  评论(0编辑  收藏  举报