题意:
每个单词有个价值,给你每个单词的数量,求组合的单词总价值不大于50的种类数。
解法:
母函数的最基本应用。
可以参考@matrix67大神的博客,但是我不知道为什么M67大神觉得母函数太丑非要说成生成函数。http://www.matrix67.com/blog/archives/120
简单的例子举例啦。
例子一:
题目:有质量为1,2,3,的砝码个一枚,求可以称出多少种的质量?要称出质量为3的物品,方案数量?
各有一枚的话,
一个1克的砝码,(1+x),1代表的是可以不用,x代表的是使用,同理的到(1+x^2),(1+x^3)
G(x)=(1+x)(1+x^2)(1+x^3) ##一定要注意x并没有实际意义。
=1+x+x^2+2x^3+x^4+x^5+x^6
从式子中我们可以得知,这些砝码可以称出的质量范围是1~6克的物品,并且知道每种重量的方案数。
答案:6种(如果0克也算一种的话,那么当然是7种了)。质量为3的方案数量是2,从系数中可以得出。
注: 如果每个砝码为无穷个:G(x)=(1+x+x^2+x^3....)(1+x^2+x^4.....)(1+x^3+x^6+.....)
例子二:
题目来自《组合数学》,解法来自@matrix67。
题目:从苹果、香蕉、橘子和梨中拿一些苹果出来,要求苹果只能拿偶数个,香蕉的个数要是5的倍数,橘子最多只能拿4个,梨子要么不拿,要么只能拿一个,求拿n个水果的方案数?#现实生活中难道真有这么无聊的事情?
通过上一个题的举例我们很容易列出每一中水果的函数了;
苹果:1+x^2+x^4+x^6.......
香蕉:1+x^5+x^10+x^15........
橘子:1+x+x^2+x^3+x^4
梨子:1+x
乘积得到G(x)=(1+x^2....)*(1+x^5....)*(1+x+x^2+x^3+x^4)*(1+x)//化简式子
=[1/(1-x^2)]*[1/(1-x^5)]*[(1-x^5)/(1-x)] *(1+x)//用笔化简一下就好了,这个博客不是很会用
=1/[(1-x)^2]
=(1-x)^(-2)
= C(1,0)+C(2,1)X+C(3,2)X^2+C(4,3)X^3.....
= 1 + 2x + 3X^2+ 4 X^3....
这样我们就得到了答案,拿n个水果的方案数n+1(次方前面的系数)。
说明: 基础知识的储备:1, 1+x^2+x^4.....=1/(1-x^2)
2, (1-x)^(-k)=C(n+k-1,n) x^n//上面的式子就没有什么问题了。
对于这道题就是很简单的母函数应用了。
对于样例一:(1+x^1)(1+x^2)(1+x^3)=1+x+x^2+2x^3+x^4+x^5+x^6
次方小于5的方案数 1+1+2+1+1=7
/*************************************************************************
> File Name: hdu2082.cpp
> Author: cy
> Mail: [email protected]
> Created Time: 2014/8/18 21:26:41
************************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include