母函数

母函数,又称生成函数,是ACM竞赛中经常使用的一种解题算法,常用来解决组合方面的题目。

第一种问题:

有1克、2克、3克、4克的砝码各一枚,能称出哪几种重量?每种重量各有几种可能方案?

我们用母函数来解决这个问题

1个1克砝码可以看成1+x^1,1表示不取,x^1表示取一个,以下同理 1个2克砝码可以看成1+x^2 1个3克砝码可以看成1+x^3 1个4克砝码可以看成1+x^4

 

第二种问题:

求用1分、2分、3分的邮票贴出不同数值的方案数: 大家把这种情况和第一种比较有何区别?第一种每种是一个,而这里每种是无限的。

#include <iostream>  
using namespace std;  
const int _max = 10001;   
// c1是保存各项质量砝码能够组合的数目  
// c2是中间量。保存没一次的情况  
int c1[_max], c2[_max];     
int main()  
{      
    int nNum;     
    int i, j, k;  
   
    while(cin >> nNum)  
    {  
        for(i=0; i<=nNum; ++i)   // ---- ①  
        {  
            c1[i] = 1;  
            c2[i] = 0;  
        }  
        for(i=2; i<=nNum; ++i)   // ----- ②  
        {  
   
            for(j=0; j<=nNum; ++j)   // ----- ③  
                for(k=0; k+j<=nNum; k+=i)  // ---- ④  
                {  
                    c2[j+k] += c1[j];  
                }  
            for(j=0; j<=nNum; ++j)     // ---- ⑤  
            {  
                c1[j] = c2[j];  
                c2[j] = 0;  
            }  
        }  
        cout << c1[nNum] << endl;  
    }  
    return 0;  
} 

可以到hdu acm上练习母函数

HDOJ   1028  1085  1171  1248  1398  1709  2069  2152

其它相关题目(比如求邮票、硬币之类的组合数、整数的不同拆分数等)

posted on 2019-07-09 18:41  天池怪侠  阅读(214)  评论(0编辑  收藏  举报

导航