www 被大佬|

wscqwq

园龄:2年粉丝:2关注:3

生成函数

生成函数

生成函数是一种将一个序列映射成一个多项式的方式,具体而言,对于无限/有限序列 a1,a2,,an,,记 g(x)=a1+a2x+a3x2++anxn+,则 g(x) 为原序列的生成函数。

生成函数可以用于解决一些计数问题,它可以利用乘法原理。

例如有 1g,2g,4g 砝码,问拼凑的质量及其对应方案。

对于 1g 砝码的生成函数:1+x

对于 2g 砝码的生成函数:1+x2​。

对于 3g 砝码的生成函数:1+x3

乘起来,展开后对应的几次项系数就是拼凑出来的方案,例如有项 2x3,则拼凑出 3 有两种方案。

当然上面是有限的情况,可以是无限的。

小应用

求解 x1+x2+x3+xn=k 的非负整数解个数。

这个已经很经典了,令 yi=xi+1,变形为 y1+y2+y3+yn=k+n

转化为有 k+n 个小球,在它们之间插入 n1 个隔板分成 n 部分,因为有 k+n1 个槽,所以方案数 Ck+n1n1

而用生成函数:

每个 x 都可以有任意多个小球,即任意的 xi,生成函数为 1+x+x2+x3+=1xn1x(等比数列求和),由于无限个,所以 xn 趋于 0,变为 11x

所以总的生成函数为 1(1x)n,展开后若需要总和为 k,则 xk 的系数应该就是一一对应的,为 Ck+n1n1

[例题]食物

  • 承德汉堡:偶数个。

1+x2+x4+=1xn1x2=11x2

  • 可乐:0 个或 1 个。

1+x=1x21x

  • 鸡腿:0 个,1 个或 2 个。

1+x+x2=1x31x

  • 蜜桃多:奇数个。

x+x3+x5+=x(1+x2+x4+)=x1x2

  • 鸡块:4 的倍数个。

1+x4+x8+=11x4

  • 包子:0 个,1 个,2 个或 3 个。

1+x+x2+x3=1x41x

  • 土豆片炒肉:不超过一个。

1+x=1x21x

  • 面包:3 的倍数个。

1+x3+x6+=11x3

接下来乘起来消消乐可得 x×1(1x)4

生成函数为 xn=0infanxn=xn=0infCn+4141xn=n=0infCn+33xn+1

要求取到 xN 时的答案,就是看前面的 n=N1,代入 Cn+33=CN+23=(N+2)(N+1)N6

对应高精度,没有必要,读入时乘加时模即可(相当于把数拆解成了 10n 的形式,而加、乘满足取模的封闭性)。

AC

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/17589760.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wscqwq  阅读(23)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起