组合数学-母函数

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


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