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

时间:2024-12-08 13:04:02

题意:

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