組合數學-母函數

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章