组合数

  1. 二项式定理:(a+b)n=r=0n(nr)anrbr(a+b)^n=\sum_{r=0}^n\binom nra^{n-r}b^r

  2. 范德蒙恒等式:(n+mk)=i=0k(ni)(mki)\binom{n+m}k=\sum_{i=0}^k\binom ni\binom m{k-i}

  3. 推论:mn(nm)=(n1m1)\frac mn\binom nm=\binom{n-1}{m-1}(nm)m=(n1m1)n\binom nmm=\binom{n-1}{m-1}n


错排列

77 项:

D0D_0 D1D_1 D2D_2 D3D_3 D4D_4 D5D_5 D6D_6 D7D_7
00 00 11 22 99 4444 265265 18541854 \cdots

公式:Dn=(n1)(Dn1+Dn2)=nDn1+(1)nD_n=(n-1)(D_{n-1}+D_{n-2})=nD_{n-1}+(-1)^n


圆排列

公式:(n1)!(n-1)!


卡特兰数 Catalan

66 项:

H0H_0 H1H_1 H2H_2 H3H_3 H4H_4 H5H_5 H6H_6 H7H_7
11 11 22 55 1414 4242 132132 429429 \cdots

公式:

  1. Hn=i=0n1Hi×Hni1 (n2)H_n=\sum_{i=0}^{n-1}H_i\times H_{n-i-1}~(n\ge 2)O(n2)O(n^2) 递推)

  2. Hn=Hn1×4n2n+1H_n=H_{n-1}\times\frac{4n-2}{n+1}O(n)O(n) 递推)

  3. Hn=(2nn)n+1H_n=\frac{\binom{2n}n}{n+1}O(1)O(1)

  4. Hn=(2nn)(2nn1)H_n=\binom{2n}n-\binom{2n}{n-1}O(1)O(1)

应用:

  1. nn 对括号有多少种匹配方式。
    f2if_{2i} 表示前 2i2i 个位置的方案数。枚举与位置 2i2i 上放置的右括号匹配的左括号的位置,有 f2i=f0×f2i2+f2×f2i4++f2i2×f0f_{2i}=f_0\times f_{2i-2}+f_2\times f_{2i-4}+\cdots+f_{2i-2}\times f_0。可知 f2i=Hif_{2i}=H_i

  2. 一个无穷大的栈,进栈序列为 1,2,,n1,2,\cdots,n,有多少个不同的出栈序列。
    将进栈看作左括号,将出栈看作右括号,同 1。

  3. 在圆上选择 2n2n 个点,将这些点成对相连使得所得到的 nn 条线段不相交的方法数。
    同 1。

  4. 2n2n 个人排队买票问题,票价 5050 元,nn 个人拿 5050 元,nn 个人拿 100100 元,售票处无零钱,能顺利卖票的排队方式数。
    5050 元看作进栈,100100 元看作出栈,同 1。

  5. 对角线不相交的情况下,将一个 n+2n+2 个顶点的凸多边形区域分成三角形区域的方法数。
    以凸多边形的一边为基,设这条边的顶点为 AABB。从剩余顶点中选一点 CC,可以将凸多边形分成三个部分。中间是一个三角形 ABCABC,左右两边分别是两个凸多边形,然后求解左右两个凸多边形。

  6. nn 个结点构成的不同的二叉树的个数。
    根占用一个结点,那么剩余的 n1n-1 个结点分配给左 / 右儿子。

例子:

  1. 只往上 / 右走,从 (0,0)(0,0) 走到 (n,m)(n,m)nmn\ge m)且不越过 y=xy=x 的方案数。
    不合法方案等价于到沿 y=x+1y=x+1 翻折后的 (n,m)(n,m) 的方案数。

第一类斯特林数 Stirling

[nm]\begin{bmatrix}n\\m\end{bmatrix}s(n,m)s(n,m))表示把 nn 个数的序列划分为 mm 个圆排列的方案数。

公式:[nm]=[n1m1]+(n1)[n1m]\begin{bmatrix}n\\m\end{bmatrix}=\begin{bmatrix}n-1\\m-1\end{bmatrix}+(n-1)\cdot\begin{bmatrix}n-1\\m\end{bmatrix}

性质:n!=i=0n[ni]n!=\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}

计算一行第一类斯特林数 [UNFINISHED]

ii 次选择时,有 11 种选择创建新的圆排列,有 i1i-1 种选择加入旧的原排列,写出生成函数为 i=1n(x+i1)=i=0n1(x+i)=xn\prod_{i=1}^n(x+i-1)=\prod_{i=0}^{n-1}(x+i)=x^{\overline{n}}

分治 NTT 时间复杂度 O(nlog2n)O(n\log^2n)。存在 O(nlogn)O(n\log n) 的算法,待填。


第二类斯特林数 Stirling

{nm}\begin{Bmatrix}n\\m\end{Bmatrix}S(n,m)S(n,m))表示把 nn 个不同的小球放在 mm 个相同的盒子里方案数。

公式:

  1. {nm}={n1m1}+m{n1m}\begin{Bmatrix}n\\m\end{Bmatrix}=\begin{Bmatrix}n-1\\m-1\end{Bmatrix}+m\cdot\begin{Bmatrix}n-1\\m\end{Bmatrix}

  2. {nm}=i=0m(1)miini!(mi)!\begin{Bmatrix}n\\m\end{Bmatrix}=\sum_{i=0}^m\frac{(-1)^{m-i}\cdot i^n}{i!\cdot(m-i)!}

计算一行第二类斯特林数

根据公式 2 卷积计算即可,时间复杂度 O(nlogn)O(n\log n)


库默尔定理

唯一分解 (n+mm)\binom{n+m}m 后,质数 pp 的幂次为 n+mn+mpp 进制下的进位次数。