hdu 1028 Ignatius and the Princess III(母函数)

题意:

  N=a[1]+a[2]+a[3]+...+a[m];
  a[i]>0,1<=m<=N;

例如:

  4 = 4;
  4 = 3 + 1;
  4 = 2 + 2;
  4 = 2 + 1 + 1;
  4 = 1 + 1 + 1 + 1;

共有5种。

给N,问共有几种构造方式。

 

思路:

一个数N分解的式子中1的个数可以是0,1,2,3,...,N。

2的个数可以是0,1,2,...,N/2。

....

母函数基础题,,

看代码。

当然也可以用DP(背包)

 

母函数代码:

int N,num;
int a[200],b[200];

int main(){
    while(cin>>N){
        memset(a,0,sizeof(a)); a[0]=1; memset(b,0,sizeof(b));
        for(int i=1;i<=N;++i){
            for(int j=0;j<=N;++j)
                for(int k=0;k+j<=N;k+=i) b[j+k]+=a[j];
            for(int j=0;j<=N;++j){ a[j]=b[j]; b[j]=0; }
        }
        cout<<a[N]<<endl;
    }
}

 

posted @ 2015-02-01 15:42  fish7  阅读(115)  评论(0编辑  收藏  举报