1.整数划分
类似于给你各种重量的砝码,问有多少种方法称出重量W,这里转化为给你1,2,3...n种数,问如何组合可以得到n。
对于重量为1的砝码(用整数1):(x^0+x^1+x^2+...+x^n)
对于重量为2的砝码(用整数2):(x^0+x^2+x^4+...+x^(2*k))(2*k<=n)
对于重量为3的砝码(用整数3):(x^0+x^1+x^2+...+x^(3*k))(3*k<=n)
以此类推.....
要求得重量W(或者整数n)的匹配方案数,只要将所有种类砝码(整数)的多项式相乘后,x^W项(x^n项)前的系数即为方案数。
HDU1028
//母函数
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define N 121
int c1[N],c2[N];
int main()
{
for(int i=0; i<N; i++)
c1[i]=1;
for(int i=2; i<N; i++)
{
memset(c2,0,sizeof(c2));
for(int j=0; j<N; j++)
for(int k=0; k+j<N; k+=i)
c2[k+j]+=c1[j];
for(int i=0; i<N; i++)
c1[i]=c2[i];
}
int n;
while(cin>>n)
cout<<c1[n]<<endl;
return 0;
}