生成函数
先贴上两位大佬的博客:https://www.cnblogs.com/RabbitHu/p/9178645.html,https://www.cnblogs.com/moomcake/p/9385828.html。
它们可以解答两个问题:生成函数里的x有什么用——没什么用,去掉也行。用生成函数的好处在哪里——把组合问题的法则和幂级数的乘幂对应起来。
加法法则的定义:设事件A有m种产生方式,事件B有n种产生方式,则事件A或B之一有m+n种产生方式。
乘法法则的定义:做一件事,完成它需要分成n个步骤,做第一 步有m1种不同的方法,做第二步有m2种不同的方法,……,做第n步有mn种不同的方法。那么完成这件事共有 N=m1×m2×m3×…×mn 种不同的方法。
让我们来举个栗子:现在有1g,2g,3g三种砝码,得到mg质量的方案数是多少呢?显然,我们要在1g,2g和3g的砝码中都挑出若干个,如果它们的质量组合起来正好是mg,意味着得到mg质量的方案数+1。
考虑构造三个函数。1g砝码对应的函数是(f_1(x)=1+x+x^2+dots),表示用1g砝码得到某个质量只有一个方案。同理,(f_2(x)=1+x^2+x^4+dots,f_3(x)=1+x^3+x^6+dots)。那么,(f_1f_2f_3)就表示用1g,2g,3g砝码得到某个质量的方案数。
我们可以这样来看两个生成函数A和B相乘得到C:对于C的第i项,组成它的方案数就是组成A的第0项的方案数*组成B的第i项的方案数+组成A的第1项的方案数*组成B的第i-1项的方案数……以此类推。这里就体现了组合问题的那两个法则。
通常第i项表示选i个此类物品有几种方案?