首页 > 代码库 > HDU 1028

HDU 1028

生成函数。这是一种特殊的计数方法,系数即为所要计数的结果。

多个多项式相乘,每个多项式表示一种选择。在本题中,有(1+x+x^2+....)(1+x^2+x^4+....)......

表示,第一个数只能是1可以无数次,第二个数只能是2,可取无数次。。。。

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define N 130using namespace std;int c1[N],c2[N];int main(){	for(int i=0;i<=120;i++){		c1[i]=1;c2[i]=0;	}	for(int i=2;i<=120;i++){		for(int j=0;j<=120;j++){			for(int k=0;k+j<=120;k+=i)			c2[k+j]+=c1[j];		}		for(int j=0;j<=120;j++)		c1[j]=c2[j],c2[j]=0;	}	int n;	while(scanf("%d",&n)!=EOF){		printf("%d\n",c1[n]);	}	return 0;}

  

HDU 1028