ACM里的生成函数初探

生成函数

前情提要:由于本人不太喜欢写博客(懒),所以写的时候一般是由于某些原因写的专题内容。这次是2020CCPC长春热身赛的D题没做出来。

大佬论文放前面:推荐阅读:毛杰明 母函数的性质及应用

基本知识

生成函数,又叫母函数。相信所有人都曾经接触过它。毕竟高中数学教材上,关于ΣC(n,i),就是用的(x+1)^n,令x=1来证明的。用一句话来概括,生成函数就是把一个组合数学问题的模型,转化到多项式的系数上去。从而利用一些性质解决问题。

首先,让我们讨论一些基本的多项式性质。因为涉及到多项式,这里和学习FFT一样,先讨论一下基本的多项式运算。会FFT的可以直接跳过,不会FFT的不影响阅读,不过有些题目看得懂思路没法做qaq。这里用大写字母表示一个多项式,小写字母表示对应系数。比如C(x)=c0+c1x+…+cnx^n。

(1)C(x)=k * A(x) 显然 ci=k * ai
(2)C(x)=A(x)+B(x) 显然 ci=ai+bi
(3)C(x)=A(x)-B(x) 显然 ci=ai-bi
(4)C(x)=A(x) * B(x) 显然 ci=Σaj * b(i-j)
(5)C(x)=A’(x)(求导)显然 ci=(ai+1) * (i+1)

其中第四个是卷积形式,有些时候,我们会直接用FFT进行计算。有些时候,我们可以利用高等数学和(5),大大化简过程。我们知道,在|x|>=1的时候,这个多项式取值是没有极限的。不过,当|x|<1的时候,就不一定了,比如,最简单的1+x+x*x…+x^n。利用等比数列求和和极限的知识,我们可以得到它等于1/(1-x)。那么用1/(1-x)做乘法,肯定是比用原来的多项式做乘法来的方便的。生成函数有意思的地方,也就在乘积上(毕竟是多项式,和FFT一样,没有卷积都可以O(n))

普通母函数&&指数型母函数(排列和组合)

私以为,用一句话来说的话。普通母函数是排列,指数型母函数是组合。一个考虑顺序,一个不考虑。把普通母函数的x^i除以i!后,就得到了指数型母函数。当然,并不是说排列问题用普通母函数,组合问题用指数型母函数,哪个简单用哪个,得到的系数乘上组合数就可以相互转化了。
至于为什么叫指数型函数,是因为泰勒公式。把每一个x^n都除以n的阶乘的话,得到的最终的函数,不可避免地由e的次方组成,所以命名为指数函数。
比如说:对于最简单的普通母函数1+x+x * x…+x^n=1/(1-x)
变成指数型母函数1+x/1!+x*x/2!…x^n/n!
由泰勒公式,我们可以得到上式等于e^x。

一些常见的生成函数

普通

1/(1-ax)^m=1+aC(m,m-1)x+a * a * C(m+1,m-1) * x * x…

指数型

令m=e^x,n=1/m
<1,1,1,1,1…1>=m
<1,-1,1,-1…>=n
<0,1,0,1,0,1…>=(m-n)/2
<1,0,1,0,1,0…>=(m+n)/2

生成函数Pόlya 定理

这个原理非常简单,Pόlya 定理只能知道方法数,比如色图(是个题目)的染色总方案,但是不能知道某个颜色染几种的对应方案数。于是有了生成函数Pόlya 定理。原理十分简单,就是把Pόlya 定理里对应每个群的阶乘还原成多项式。比如染黑白两色,2的三次方=(b+w)的三次方。

题目清单

hdu1028&1085&1171&1398
同一种题目,不就是在做背包DP,以1028为例子,整数划分问题中,以4为例子,对于1,2,3分别构造生成函数(1+x1+x2+x3+x4),(1+x2+x4),(1+x3),算乘积中的x4的系数,说实话,不太算生成函数,转化了模型(真的有转化嘛,和变成1,2,3元凑4元没区别吧),还是背包DP。私以为有点强行生成函数,不过给新手学习思路可以用。
hdu4651&4658
同样是整数划分,扩大了范围,这会要用到五边形数和广义五边形数了,这个结论可以用生成函数和欧拉函数的五边形数定理推得。O(n^3/2)
CCPC长春热身赛D
题目意思:总共1e18个灯,其中a个亮的,b个灭的,剩下都是坏的,0<=a,b<=5000。问不同的按法(考虑按的顺序,灯各不相同,按法序列相同当且仅当每一次都是按用一个灯)
一开始列了个转移方程,当时这个范围没法快速幂,最后挂机了。事后学了指数型母函数,这道题目的思路是,等于a个灯按奇数次,b个灯按偶数次,c个灯任意,使得总数等于n。令e^x等于m,1/m等于n。每个奇数灯生成函数都是(m-n)/2,偶数灯都是(m+n)/2,任意灯都是m。乘到一起然后由泰勒展开,要求的即是函数的n次导数。
poj 3734
指数型生成函数例题吧,可以算。
poj1322
论文题,概率DP只能O(NM),不过可以用指数型生成函数,就变成奇数次偶数次。类似那个热身赛题。
CF 451E
容斥原理,或者用母函数表示限定关系。复杂度都是2^n
BZOJ 3771
用FFT加速母函数运算
*hdu 6042
做完这道题目可以算入门了生成函数了吧。
BZOJ 3028
论文里的自编题,这个题目看了论文的都会,算是最能证明生成函数优点的题目。
BZOJ 4772
加上了数论,弄晕了,第一次没做出来,看了题解。用到了积性函数。
大概按类分别做了下,写到了能帮助自己记忆理解的程度。详细的题解博客写起来挺耗时间的,等退役补一下,还能留给学弟们做参考。

电脑前这个努力的帅气身影是谁呢?そう 私 です
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ACM Codebook(ACM代码手册)是一本整理了算法竞赛常用算法和数据结构的参考手册。它是为了帮助算法竞赛选手快速查阅各种算法和数据结构的实现而编写的。 ACM Codebook的内容非常丰富,包括了各种常用算法,如排序算法、图论算法、动态规划算法等。同时,它还包含了各种常用数据结构的实现,如链表、栈、队列、堆等。此外,ACM Codebook还介绍了一些常见的算法设计技巧和优化技巧,帮助选手更好地解决问题。 ACM Codebook的作用非常明显,首先它提供了各种算法和数据结构的实现代码,方便选手直接复制粘贴使用,节省了编写代码的时间。其次,ACM Codebook提供了详细的算法和数据结构的说明和示例,帮助选手理解和掌握这些算法和数据结构的原理和用法。最后,ACM Codebook还提供了一些常见问题的解决方案,帮助选手快速解决问题。 ACM Codebook的编写并不容易,需要作者具备扎实的算法和数据结构基础,并且对算法竞赛有深入的了解。编写ACM Codebook需要不断地修改和更新,以适应算法竞赛中不断变化的需求。 总之,ACM Codebook是一本非常有用的参考手册,它不仅提供了丰富的算法和数据结构的实现,还提供了对应的说明和示例,帮助算法竞赛选手快速掌握和应用这些算法和数据结构。它是算法竞赛选手在比赛中必备的工具之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值