组合数
-
二项式定理:(a+b)n=∑r=0n(rn)an−rbr
-
范德蒙恒等式:(kn+m)=∑i=0k(in)(k−im)
-
推论:nm(mn)=(m−1n−1) 或 (mn)m=(m−1n−1)n
错排列
前 7 项:
D0 |
D1 |
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
|
0 |
0 |
1 |
2 |
9 |
44 |
265 |
1854 |
⋯ |
公式:Dn=(n−1)(Dn−1+Dn−2)=nDn−1+(−1)n
圆排列
公式:(n−1)!
卡特兰数 Catalan
前 6 项:
H0 |
H1 |
H2 |
H3 |
H4 |
H5 |
H6 |
H7 |
|
1 |
1 |
2 |
5 |
14 |
42 |
132 |
429 |
⋯ |
公式:
-
Hn=∑i=0n−1Hi×Hn−i−1 (n≥2)(O(n2) 递推)
-
Hn=Hn−1×n+14n−2(O(n) 递推)
-
Hn=n+1(n2n)(O(1))
-
Hn=(n2n)−(n−12n)(O(1))
应用:
-
n 对括号有多少种匹配方式。
记 f2i 表示前 2i 个位置的方案数。枚举与位置 2i 上放置的右括号匹配的左括号的位置,有 f2i=f0×f2i−2+f2×f2i−4+⋯+f2i−2×f0。可知 f2i=Hi。
-
一个无穷大的栈,进栈序列为 1,2,⋯,n,有多少个不同的出栈序列。
将进栈看作左括号,将出栈看作右括号,同 1。
-
在圆上选择 2n 个点,将这些点成对相连使得所得到的 n 条线段不相交的方法数。
同 1。
-
2n 个人排队买票问题,票价 50 元,n 个人拿 50 元,n 个人拿 100 元,售票处无零钱,能顺利卖票的排队方式数。
将 50 元看作进栈,100 元看作出栈,同 1。
-
对角线不相交的情况下,将一个 n+2 个顶点的凸多边形区域分成三角形区域的方法数。
以凸多边形的一边为基,设这条边的顶点为 A 和 B。从剩余顶点中选一点 C,可以将凸多边形分成三个部分。中间是一个三角形 ABC,左右两边分别是两个凸多边形,然后求解左右两个凸多边形。
-
由 n 个结点构成的不同的二叉树的个数。
根占用一个结点,那么剩余的 n−1 个结点分配给左 / 右儿子。
例子:
- 只往上 / 右走,从 (0,0) 走到 (n,m)(n≥m)且不越过 y=x 的方案数。
不合法方案等价于到沿 y=x+1 翻折后的 (n,m) 的方案数。
第一类斯特林数 Stirling
[nm](s(n,m))表示把 n 个数的序列划分为 m 个圆排列的方案数。
公式:[nm]=[n−1m−1]+(n−1)⋅[n−1m]
性质:n!=∑i=0n[ni]
计算一行第一类斯特林数 [UNFINISHED]
第 i 次选择时,有 1 种选择创建新的圆排列,有 i−1 种选择加入旧的原排列,写出生成函数为 ∏i=1n(x+i−1)=∏i=0n−1(x+i)=xn。
分治 NTT 时间复杂度 O(nlog2n)。存在 O(nlogn) 的算法,待填。
第二类斯特林数 Stirling
{nm}(S(n,m))表示把 n 个不同的小球放在 m 个相同的盒子里方案数。
公式:
-
{nm}={n−1m−1}+m⋅{n−1m}
-
{nm}=∑i=0mi!⋅(m−i)!(−1)m−i⋅in
计算一行第二类斯特林数
根据公式 2 卷积计算即可,时间复杂度 O(nlogn)。
库默尔定理
唯一分解 (mn+m) 后,质数 p 的幂次为 n+m 在 p 进制下的进位次数。