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