生成函数

对于一个序列:

 

那么它的一般生成函数为:

 

它的指数生成函数为:


 
 
题目:HDU1028
 
分析:整数拆分,其实本题可以用五边形数定理来求,这样对于n很大时也就可以用,这里我们主要用生成函数。
 
#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;

const int N=10005;

int c1[N],c2[N];

int main()
{
    int n,i,j,k;
    while(cin>>n)
    {
        if(n==0) break;
        for(i=0;i<=n;i++)
        {
            c1[i]=1;
            c2[i]=0;
        }
        for(i=2;i<=n;i++)
        {
            for(j=0;j<=n;j++)
                for(k=0;k+j<=n;k+=i)
                    c2[k+j]+=c1[j];
            for(j=0;j<=n;j++)
            {
                c1[j]=c2[j];
                c2[j]=0;
            }
        }
        cout<<c1[n]<<endl;
    }
    return 0;
}

 
典型题目:HDU1028,HDU1398,HDU1085,HDU1171,HDU1709
 

你可能感兴趣的:(生成函数)