母函数详解 http://www.wutianqi.com/?p=596
第二种:
求用1分、2分、3分的邮票贴出不同数值的方案数:
大家把这种情况和第一种比较有何区别?第一种每种是一个,而这里每种是无限的。
看这个题,当邮票为两分时,就是(1+x^2+x^4+x^6+x^8+.......) 因为是无限多个
当邮票为四分时 (1+x^4+x^8+x^12.....)
所以当有n个邮票时,状态就是1*(1+x^1+x^2+x^3+.....+x^n)*(1+x^2+x^4+x^6+.....+x^n)*(1+x^3+x^6+x^9+......+x^n)*......*x^n
就和我们这道题一样了。x^n前的系数就是状态数
题意 给一个数n,求输出所有因子相加方案数。
#include<stdio.h>
#include<string.h>
int n,c[222],d[1111],now[1111];
int main(){
while(scanf("%d",&n)!=EOF){
for(int i=0;i<=n;i++){
c[i]=1;
now[i]=0;
}
for(int i=2;i<=n;i++){
for(int j=0;j<=n;j++){
for(int k=0;k+j<=n;k+=i){
now[j+k]+=c[j];
}
}
for(int j=0;j<=n;j++){
c[j]=now[j];
now[j]=0;
}
}
printf("%d\n",c[n]);
}
return 0;
}