排列组合
排列
从(n)个不同的元素中取出(m)个的方案数,记为(A(n,m))或(P(n,m))
组合
从(n)个相同的元素中取出(m)个的方案数,记为(C(n,m))或(inom{n}{m})
隔板法
用(m-1)个相同隔板把(n)个相同元素分成(m)部分(可以有两个隔板插在同一个空隙)
方案数:$$C(n+m-1,m-1)=C(n+m-1,n)$$
容斥原理
不定方程非负整数解计数
给出不定方程(sum_{i=1}^n x_i=m)和(n)个限制条件(x_ile b_i) ,其中(m,b_iin mathbb{N})。求方程的非负整数解的个数。
解
考虑求有限制(x_igeq b_i+1)的不定方程非负整数解个数。
将每个有限制的(x_i)减去(b_i+1),就去掉了限制。
这样,答案(=inom{m-1}{m+n-1})。
将原问题用容斥转化成上述问题计算即可。
数论中的容斥
欧拉函数,莫比乌斯反演
容斥原理一般化
二项式反演
证明
假设有(n)个集合(A_i),任意(k)个集合的交集都是(g_k),任意(k)个集合补集的交集都是(f_k)。由容斥原理,
应用
在实际应用中,我们往往设(f(i))表示“恰好有(i)个”,(g(i))表示“钦定选(i)个,其余随意”。
min-max容斥
证明
假设(x)是第(k)大元素,定义映射(f:x
ightarrow {1,2,dots,k})。
易得(x,k,f(x))一一对应。
则(f(min(x,y))=f(x)cap f(y),f(max(x,y))=f(x)cup f(y))
然后
即
上述式子在期望意义下也是成立的。
kth min-max容斥
证明
设(max_k(S)=sum_{tsubseteq S} f(|T|) min(T))
考虑构造容斥系数(f(x))
考虑第(x+1)大的元素被统计到的贡献,为(sum_{i=0}^x inom{x}{i} f(i+1))
则
二项式反演,得
卡特兰数
一个序列有n个0和n个1,保证每个1之前必有1个0的方案数为C(n)
递推式:(注意:括号里只有一个元素的是Catalan数,有两个元素的是组合数)
前几项是 1 2 5 14 42 132 429 1430 4862 16796 ,混着眼熟
斯特林数
第一类斯特林数
把(n)个元素摆成(m)个圆排列的方案数,记为$$s(n,m)$$
递推式:
常见应用
第二类斯特林数
把(n)不同的球放在(m)个相同的盒子(无空盒)里的方案数,记为$$S(n,m)$$
递推式:
常见应用
斯特林反演
错位排列
递推式:$$f[n]=(n-1)*(f[n-1]+f[n-2])$$
当 (n) 很大时, (f[n] approx frac{n!}{e})
证明:
- (n-1) 个人已经完成错排,第 (n) 个人和任意一个人交换
- (n-1) 个人中的一个和第 (n) 个人交换,其余 (n-2) 个人已经完成错排
经典的放球问题
为方便表达,我们设方案数为(N),(n)个球,(m)个盒
1. 球不同,盒不同,有空盒
根据乘法原理可得。
2. 球不同,盒不同,无空盒
(1) (n>=m)
球不同,盒相同的方案数( imes m!)
(2) (n<m)
3. 球不同,盒同,有空盒
因为允许空盒,所以球可以只放在(m)个盒中的(1)个或(2)个或...或(m-1)个盒中
4. 球不同,盒同,无空盒
(1) (n>=m)
由第二类斯特林数的定义。
(2) (n<m)
5. 球同,盒不同,有空盒
插板法,即把(n)个球用(m-1)个隔板分成(m)部分。
6. 球同,盒不同,无空盒
(1) (n>=m)
先在每个盒子里放一个球,方案数为(1);再对剩下的(n-m)个球用隔板法,即把(n-m)个球用(m-1)个隔板分成(m)部分。
(2) (n<m)
7. 球同,盒同,有空盒
(1) (n>=m)
我们发现,当(n=5,m=3)时的方案为:
5 0 0
4 1 0
3 2 0
3 1 1
2 2 1
共(5)种方案。
我们发现,问题可以转化为:把正整数(n)分解成不超过(m)个自然数的方案数。如果暴力dfs,时间复杂度为(O()爆炸())。竟然还有70分
有一个重要结论:把正整数(n)分解成不超过(m)个自然数的方案数,等于把正整数(n)分解成若干个(le m)的自然数的方案数。这个定理的证明方法,请自行百度。(我也不会)
我们考虑使用母函数:对于分解出的每个(le m)的整数(i),我们用多项式表示为$$(xi+x{2i}+...+x^{floor(frac{n}{i})*i})$$
此处(floor(x))表示(x)向下取整。
于是,母函数(G(x)):$$G(x)=prod_{i=1}{m}(xi+x{2i}+...+x{floor(frac{n}{i})*i})$$
求出(x^n)的系数即可。
(2) (n<m)
$$color{white}{???}$$
8. 球同,盒同,无空盒
(1) (n>=m)
母函数$$G(x)=prod_{i=1}{m}(xi+x{2i}+...+x{floor(frac{n}{i})*i})$$
中(x^{n-m})的系数。
(2) (n<m)
生成函数
引子
砝码称重问题
有1g砝码5个,2g砝码3个,5g砝码2个。相同质量的砝码完全相同。问有多少种能称出15g的方案?
解
很容易想到暴力枚举每一种可能的称量方案,但是时间复杂度为(O(n^n))级别,计算机无法承受。于是我们引入母函数的概念。设(G(x))为母函数,对于1g的砝码能称出的不同重量,我们用多项式表示为$$(x1+x2+...+x{15})$$同理,2g砝码能表示为$$(x2+x4+...+x{14})$$5g砝码能表示为$$(x5+x{10}+x^{15})$$
于是$$G(x)=(x1+x2+...+x{15})(x2+x4+...+x{14})(x5+x{10}+x^{15})$$
经过化简,求出(x^{15})的系数,即为答案。
由于只需化简多项式,母函数的时间复杂度仅为(O(n^3)),空间复杂度为(O(n)),得到巨大提升。
使用fft可以进一步优化。
OGF
序列(a)的普通生成函数:(F(x)=sum_{n} a_nx^n)
基本运算律
设(F(x))是(a)的OGF,(G(x))是(b)的OGF,则:
- (F(x)pm G(x))是(apm b)的OGF
- (F(x)G(x))是(sum_{i=0}^n a_ib_{n-i})的OGF
常见封闭形式
封闭形式的展开
斐波那契数列
设
通分,解得
即
广义二项式定理
卡特兰数
(H(x)=frac{1-sqrt{1-4x}}{2x})
对(sqrt{1-4x})用广义二项式定理展开,代回原式,得
EGF
序列(a)的指数生成函数:(F(x)=sum_{n} a_nfrac{x^n}{n!})
基本运算律
设(F(x))是(a)的EGF,(G(x))是(b)的EGF,则:
- (F(x)pm G(x))是(apm b)的EGF
- (F(x)G(x))是(sum_{i=0}^n inom{n}{i}a_ib_{n-i})的EGF
泰勒展开
我们用下式表示(f(x))在(x_0)处的泰勒展开式
其中(R_n(x))是((x-x_0)^n)的高阶无穷小。
直观理解
常见封闭形式
排列与圆排列
长为(n)的排列的EGF:(P(x)=sum_{ngeq 0}frac{n!x^n}{n!}=frac{1}{1-x})
长为(n)的圆排列的EGF:(Q(x)=sum_{ngeq 0}frac{(n-1)!x^n}{n!}=ln(frac{1}{1-x}))