离散与组合数学
离散与组合数学讲义
覆盖计数原理与组合恒等式、鸽巢原理、递推与生成函数、特殊计数序列、格路计数与 LGV 引理、图论计数、偏序集与匹配理论中的经典定理。
建议课时:4 课时(180 分钟)。前置:组合数取模、基本 DP。
0. 课前引入
问题 1:把 10 个相同的球放进 4 个不同的盒子,每盒至少一个,有多少种?
问题 2:一个 \(n \times n\) 网格从左下走到右上,只能向上向右,且不能越过对角线,有多少条路径?
问题 3:有 \(n\) 个有标号的点,能构成多少棵不同的树?
问题 4:一个偏序集里,最少要用多少条链才能覆盖所有元素?
答案分别是 \(\binom{9}{3} = 84\)、卡特兰数 \(C_n\)、\(n^{n-2}\)、最长反链的长度。四个问题分别对应本讲的隔板法、格路计数、Prüfer 序列、Dilworth 定理。组合数学的特点是每个结论都短,但背后都有一个漂亮的"看问题的角度"。本讲重点讲角度,不只讲公式。
1. 计数原理与组合恒等式
1.1 基本模型
| 模型 | 公式 | 说明 |
|---|---|---|
| \(n\) 个不同元素全排列 | \(n!\) | |
| 从 \(n\) 个选 \(k\) 个排列 | \(n^{\underline{k}} = \dfrac{n!}{(n-k)!}\) | |
| 从 \(n\) 个选 \(k\) 个组合 | \(\dbinom{n}{k}\) | |
| 多重集排列 | \(\dfrac{n!}{n_1!\,n_2!\cdots n_k!}\) | \(n_i\) 个第 \(i\) 类相同元素 |
| 圆排列 | \((n-1)!\) | 旋转等价 |
| 项链排列 | \(\dfrac{(n-1)!}{2}\) | 旋转 + 翻转等价,\(n \ge 3\) |
| 可重复选取 | \(\dbinom{n+k-1}{k}\) | 从 \(n\) 种中选 \(k\) 个,可重复 |
1.2 隔板法
\(x_1 + x_2 + \cdots + x_k = n\) 的解数:
- 正整数解:\(n\) 个球排成一排,\(n-1\) 个空隙插 \(k-1\) 块板:\(\dbinom{n-1}{k-1}\)。
- 非负整数解:每个 \(x_i\) 加 1 转化为正整数:\(\dbinom{n+k-1}{k-1}\)。
- 有下界 \(x_i \ge a_i\):先减去 \(a_i\),转化为非负。
- 有上界 \(x_i \le b_i\):容斥,见容斥讲义 1.5 硬币购物。
1.3 必会恒等式
| 名称 | 恒等式 | 组合意义 |
|---|---|---|
| 对称 | \(\dbinom{n}{k} = \dbinom{n}{n-k}\) | 选谁 = 不选谁 |
| 吸收 | \(k\dbinom{n}{k} = n\dbinom{n-1}{k-1}\) | 选 \(k\) 人再选队长 = 先选队长再选 \(k-1\) 人 |
| 加法 | \(\dbinom{n}{k} = \dbinom{n-1}{k} + \dbinom{n-1}{k-1}\) | 第 \(n\) 个元素选或不选 |
| Vandermonde | \(\sum_i\dbinom{m}{i}\dbinom{n}{k-i} = \dbinom{m+n}{k}\) | 两组人中共选 \(k\) 个 |
| 上指标求和 | \(\sum_{i=0}^{n}\dbinom{i}{k} = \dbinom{n+1}{k+1}\) | 枚举最大元素 |
| 平行求和 | \(\sum_{i=0}^{n}\dbinom{r+i}{i} = \dbinom{r+n+1}{n}\) | 上式换形 |
| 二项式定理 | \(\sum_k\dbinom{n}{k}x^k = (1+x)^n\) | |
| 交错和 | \(\sum_k(-1)^k\dbinom{n}{k} = [n=0]\) | 容斥的基石 |
| 平方和 | \(\sum_k\dbinom{n}{k}^2 = \dbinom{2n}{n}\) | Vandermonde 特例 |
| 加权和 | \(\sum_k k\dbinom{n}{k} = n2^{n-1}\) | 吸收 + 二项式 |
讲课提示:每个恒等式都让学生用"讲故事"的方式说一遍组合意义。能讲故事的恒等式不用背。
1.4 组合证明三板斧
- 双射:构造两个集合之间的一一对应。
- 算两次:同一个集合按两种方式计数。
- 生成函数:比较系数(第 3 节)。
例:证明 \(\sum_{k}\binom{n}{k}^2 = \binom{2n}{n}\)。
算两次:\(2n\) 个人选 \(n\) 个。按"前 \(n\) 人中选了 \(k\) 个"分类,后 \(n\) 人中选 \(n-k\) 个,\(\binom{n}{k}\binom{n}{n-k} = \binom{n}{k}^2\)。
1.5 例题:洛谷 P2822 [NOIP2016] 组合数问题
求 \(\binom{i}{j}\) 中有多少个是 \(k\) 的倍数(\(i \le n\),\(j \le \min(i, m)\))。用加法公式递推 \(\binom{i}{j} \bmod k\),再二维前缀和。杨辉三角递推是模意义下算组合数最保险的方法,不需要逆元。
2. 鸽巢原理与极值原理
2.1 鸽巢原理
\(n+1\) 个物体放进 \(n\) 个盒子,至少有一个盒子有 2 个。推广:\(kn+1\) 个物体放进 \(n\) 个盒子,至少有一个盒子有 \(k+1\) 个。
2.2 经典应用
例 1:任意 \(n\) 个整数中,存在若干个连续的数,其和被 \(n\) 整除。
前缀和 \(s_0, s_1, \dots, s_n\) 共 \(n+1\) 个,模 \(n\) 只有 \(n\) 种余数,必有两个同余,相减即得。
例 2(Erdős–Szekeres):任意长度为 \(mn+1\) 的实数序列,存在长 \(m+1\) 的递增子序列或长 \(n+1\) 的递减子序列。
对每个位置记 \((a_i, b_i)\) = 以 \(i\) 结尾的最长递增 / 递减长度。若都不超过 \((m, n)\),只有 \(mn\) 种取值,但 \(mn+1\) 个位置两两不同(前面的位置总能扩展后面的一个)。矛盾。
例 3:\(1..2n\) 中任取 \(n+1\) 个数,必有两个互质。
分成 \(\{1,2\},\{3,4\},\dots\) 共 \(n\) 组,必有两个在同一组,相邻整数互质。
2.3 极值原理
"考虑最大 / 最小的那个"。证明存在性时经常与鸽巢配合。
例:竞赛图(任意两点恰有一条有向边)必有哈密顿路径。取最长路径,若有点不在其中,用极值性导出矛盾。
3. 递推关系与生成函数
3.1 线性递推的特征根法
\(a_n = c_1 a_{n-1} + c_2 a_{n-2}\)。特征方程 \(x^2 = c_1 x + c_2\),根 \(r_1, r_2\):
- 不同根:\(a_n = A r_1^n + B r_2^n\)
- 重根:\(a_n = (A + Bn) r^n\)
\(A, B\) 由初值确定。斐波那契:\(r = \dfrac{1 \pm \sqrt5}{2}\),\(F_n = \dfrac{1}{\sqrt5}\left(\varphi^n - \psi^n\right)\)。
竞赛中大 \(n\) 一般用矩阵快速幂,特征根法主要用于推闭式。
3.2 普通生成函数(OGF)
序列 \(\{a_n\}\) 的 OGF 是形式幂级数 \(A(x) = \sum_n a_n x^n\)。不关心收敛,只关心系数。
| 序列 | OGF |
|---|---|
| \(1, 1, 1, \dots\) | \(\dfrac{1}{1-x}\) |
| \(1, 2, 3, \dots\) | \(\dfrac{1}{(1-x)^2}\) |
| \(\dbinom{n+k-1}{k-1}\) | \(\dfrac{1}{(1-x)^k}\) |
| \(\dbinom{m}{n}\) | \((1+x)^m\) |
| \(c^n\) | \(\dfrac{1}{1-cx}\) |
| 斐波那契 | \(\dfrac{x}{1-x-x^2}\) |
| 卡特兰数 | \(\dfrac{1-\sqrt{1-4x}}{2x}\) |
运算对应:
- \(A(x) + B(x)\):逐项相加
- \(A(x) \cdot B(x)\):卷积 \(c_n = \sum_k a_k b_{n-k}\)
- \(x A(x)\):右移一位
- \(A'(x)\):\(n a_n\) 左移
- \(\dfrac{A(x)}{1-x}\):前缀和
3.3 用 OGF 解递推
例:\(a_n = 2a_{n-1} + 1\),\(a_0 = 0\)。
两边乘 \(x^n\) 求和:\(A(x) - a_0 = 2xA(x) + \dfrac{x}{1-x}\),解得
例(计数):用 1 元、2 元、5 元硬币凑 \(n\) 元的方案数的 OGF:
每个因子对应一种硬币"用 \(0, 1, 2, \dots\) 枚"。这是完全背包的生成函数形式。
3.4 指数生成函数(EGF)
\(\hat A(x) = \sum_n a_n \dfrac{x^n}{n!}\)。用于有标号对象。
乘法:\(\hat A \hat B\) 的第 \(n\) 项是 \(\sum_k \binom{n}{k}a_k b_{n-k}\),即"把 \(n\) 个有标号元素分给两个结构"。
| 结构 | EGF |
|---|---|
| 排列(任意长度序列) | \(\dfrac{1}{1-x}\) |
| 集合(\(n\) 个元素只有一种放法) | \(e^x\) |
| 非空集合 | \(e^x - 1\) |
| 环排列 | \(-\ln(1-x)\) |
| 错排 | \(\dfrac{e^{-x}}{1-x}\) |
\(\exp\) 的组合意义:若"连通块"的 EGF 是 \(\hat C\),则"任意个连通块组成的结构"的 EGF 是 \(\exp \hat C\)。
- 集合划分(贝尔数):块的 EGF 是 \(e^x - 1\),所以 \(\hat B = \exp(e^x - 1)\)。
- 排列 = 环的集合:\(\dfrac{1}{1-x} = \exp(-\ln(1-x))\)。
- 有标号图 = 连通图的集合(容斥进阶 6.1)。
3.5 例题:洛谷 P4389 付公主的背包
\(n\) 种物品,体积 \(v_i\),无限件,求凑出 \(1..m\) 每个体积的方案数。\(n, m \le 10^5\)。
生成函数 \(\prod_i \dfrac{1}{1 - x^{v_i}}\)。取 \(\ln\) 化乘为加:\(\ln\dfrac{1}{1-x^v} = \sum_{k \ge 1}\dfrac{x^{vk}}{k}\),对每种物品 \(O(m/v)\) 累加(调和级数 \(O(m \log m)\)),最后多项式 \(\exp\)。
这是"乘积形式 → \(\ln\) 变求和 → \(\exp\) 回去"的模板,背包的多项式加速。
4. 特殊计数序列
4.1 卡特兰数
\(1, 1, 2, 5, 14, 42, 132, 429, 1430, \dots\)
等价模型(都是 \(C_n\)):
- \(n\) 对括号的合法匹配
- \(n\) 个节点的二叉树形态
- \(n+1\) 个叶子的满二叉树
- \((0,0)\) 到 \((n,n)\) 不越过对角线的格路
- \(1..n\) 的出栈序列
- 凸 \(n+2\) 边形的三角剖分
- \(n\) 个 \(+1\) 和 \(n\) 个 \(-1\) 的序列,所有前缀和 \(\ge 0\)
- 长 \(2n\) 的不相交弦匹配(圆上 \(2n\) 点)
通项证明(反射原理):见 5.2。
4.2 第二类斯特林数 \(S(n,k)\)
\(n\) 个不同元素划分成 \(k\) 个非空无标号集合的方案数。
递推意义:第 \(n\) 个元素加入已有 \(k\) 块之一,或自成一块。通项由容斥(满射计数)得到。
同一行全部 \(S(n, \cdot)\) 可由通项卷积形式用 NTT 在 \(O(n \log n)\) 求出(洛谷 P5395)。
4.3 第一类斯特林数 \(s(n,k)\)
\(n\) 个元素分成 \(k\) 个环排列的方案数(无符号)。
意义:第 \(n\) 个元素插入已有 \(n-1\) 个元素的任一个后面(\(n-1\) 种),或自成一环。
生成函数:\(\sum_k s(n,k)x^k = x^{\overline{n}} = x(x+1)\cdots(x+n-1)\),分治 NTT 或倍增 \(O(n\log n)\)(洛谷 P5408)。
4.4 贝尔数 \(B_n\)
\(n\) 个元素的划分总数,\(B_n = \sum_k S(n,k)\)。
意义:枚举与第 \(n+1\) 个元素同块的其他元素有 \(n-k\) 个。\(1, 1, 2, 5, 15, 52, 203, \dots\)
4.5 分拆数 \(p(n)\)
把 \(n\) 写成若干正整数之和(不计顺序)的方案数。
- 恰好 \(k\) 部分:\(p(n,k) = p(n-1,k-1) + p(n-k,k)\)(最小部分是 1 / 全部减 1)。
- 生成函数 \(\sum p(n)x^n = \prod_{k \ge 1}\dfrac{1}{1-x^k}\)。
- 五边形数定理:\(\prod_{k\ge1}(1-x^k) = \sum_{k}(-1)^k x^{k(3k-1)/2}\)(\(k\) 取遍整数),于是
只有 \(O(\sqrt n)\) 项,\(O(n\sqrt n)\) 求出 \(p(0..n)\)。
4.6 错排数 \(D_n\)
\(1, 0, 1, 2, 9, 44, 265, \dots\)。递推意义:元素 \(n\) 与某个 \(i\) 互换(\(D_{n-2}\)),或 \(n\) 到 \(i\) 的位置但 \(i\) 不到 \(n\) 的位置(\(D_{n-1}\))。
4.7 欧拉数 \(\left\langle{n \atop k}\right\rangle\)
\(1..n\) 的排列中恰好有 \(k\) 个上升位置(\(a_i < a_{i+1}\))的个数。
4.8 序列速查表
| 序列 | 前几项(从 \(n=0\)) | 关键递推 |
|---|---|---|
| 卡特兰 | 1, 1, 2, 5, 14, 42 | \(C_n = \frac{4n-2}{n+1}C_{n-1}\) |
| 贝尔 | 1, 1, 2, 5, 15, 52 | \(B_{n+1} = \sum\binom{n}{k}B_k\) |
| 错排 | 1, 0, 1, 2, 9, 44 | \(D_n = (n-1)(D_{n-1}+D_{n-2})\) |
| 分拆 | 1, 1, 2, 3, 5, 7, 11 | 五边形数定理 |
| 斐波那契 | 0, 1, 1, 2, 3, 5, 8 | \(F_n = F_{n-1}+F_{n-2}\) |
5. 格路计数与 LGV 引理
5.1 基本格路
从 \((0,0)\) 走到 \((n,m)\),每步向右或向上:\(\dbinom{n+m}{n}\)。
5.2 反射原理
问题:从 \((0,0)\) 到 \((n,n)\),路径不越过对角线 \(y = x\)(即始终 \(y \le x\)),有多少条?
做法:数"坏路径",即碰到直线 \(y = x+1\) 的路径。把坏路径第一次碰到 \(y = x + 1\) 之前的部分沿这条线翻转,起点 \((0,0)\) 变为 \((-1, 1)\)。这是坏路径与"从 \((-1,1)\) 到 \((n,n)\) 的所有路径"之间的双射,后者有 \(\dbinom{2n}{n+1}\) 条。
投票问题(Ballot):A 得 \(a\) 票,B 得 \(b\) 票,\(a > b\)。计票过程中 A 始终严格领先的概率是 \(\dfrac{a-b}{a+b}\)。同样用反射。
5.3 LGV 引理
设定:有向无环图,起点 \(A_1, \dots, A_n\),终点 \(B_1, \dots, B_n\)。\(e(u, v)\) 表示从 \(u\) 到 \(v\) 的路径条数(带权时是权值和)。
特别地,若只有 \(\sigma = \text{id}\) 能产生不相交路径组(常见于网格中起点终点分别单调排列),行列式就是不相交路径组的数量。
证明思路:对相交的路径组,取第一个交点,交换两条路径交点之后的部分,得到符号相反的另一组,两两抵消。
5.4 例题:洛谷 P6657 【模板】LGV 引理
\(n \times n\) 网格,\(m \le 20\) 个起点 \((a_i, 1)\) 和终点 \((b_i, n)\),只能向右向下,求不相交路径组数。
\(e(A_i, B_j) = \dbinom{(b_j - a_i) + (n-1)}{n-1}\),\(m \times m\) 行列式 \(O(m^3)\)。
5.5 例题:CF 348D Turtles
\(n \times m\) 网格有障碍,两只乌龟从 \((1,1)\) 到 \((n,m)\) 且路径不相交。
起点拆成 \((1,2), (2,1)\),终点拆成 \((n-1,m), (n,m-1)\),答案 \(= e_{11}e_{22} - e_{12}e_{21}\),每个 \(e\) 用 DP 求。
6. 图论计数
6.1 Cayley 公式与 Prüfer 序列
\(n\) 个有标号点的树有 \(n^{n-2}\) 棵。
Prüfer 编码:每次删除编号最小的叶子,记录它的邻居,直到剩两个点。得到长 \(n-2\) 的序列,与树一一对应。
性质:
- 度数为 \(d\) 的点在序列中恰出现 \(d-1\) 次。
- 指定度数序列 \(d_1, \dots, d_n\) 的树数:\(\dfrac{(n-2)!}{\prod(d_i - 1)!}\)。
- \(k\) 个连通块(大小 \(a_1, \dots, a_k\))连成一棵树:\(n^{k-2}\prod a_i\)。
- 完全二分图 \(K_{m,n}\) 的生成树:\(m^{n-1}n^{m-1}\)。
线性构造与解码:洛谷 P6086。
6.2 矩阵树定理
无向图 \(G\),度数矩阵 \(D\),邻接矩阵 \(A\)(重边计数),拉普拉斯矩阵 \(L = D - A\)。
有向图:
- 以 \(r\) 为根的外向树(边从根指向外):\(L = D_{\text{in}} - A\),去掉第 \(r\) 行列。
- 内向树(边指向根):\(L = D_{\text{out}} - A\),去掉第 \(r\) 行列。
带权:边权当作重边数,行列式给出所有生成树边权乘积之和。要求边权和,见容斥进阶 6.4 的变量打标记技巧。
模质数下行列式用高斯消元(辗转相除消元处理无逆元的情况),\(O(n^3)\)。模板:洛谷 P6178。
6.3 BEST 定理
有向图欧拉回路数:
其中 \(t_r\) 是以任意点 \(r\) 为根的内向树数(欧拉图中与 \(r\) 无关),\(\deg(v)\) 为出度(等于入度)。回路视为循环序列,不定起点;若定起点边则乘 \(\deg(r)\)。模板:洛谷 P5807。
6.4 例题:洛谷 P4430 小猴打架
\(n\) 个猴子,每天随机两只打架成为朋友,问恰好 \(n-1\) 天后全部连通的方案数(天有顺序)。
答案 \(= n^{n-2}\cdot(n-1)!\):一棵树,边有 \((n-1)!\) 种顺序。
7. 离散结构与经典定理
7.1 关系
集合 \(X\) 上的关系 \(R \subseteq X \times X\)。
- 等价关系:自反、对称、传递。等价关系 \(\iff\) 集合划分。
- 偏序关系 \(\le\):自反、反对称、传递。偏序集 \((P, \le)\)。
- 链:两两可比的子集。反链:两两不可比的子集。
7.2 Dilworth 定理及其对偶
Dilworth:偏序集的最小链覆盖数 = 最大反链大小。
Mirsky(对偶):最小反链覆盖数 = 最长链长度。
导弹拦截(洛谷 P1020):序列上定义 \(i \le j \iff i < j\) 且 \(a_i \ge a_j\)(一套系统能拦截的是一条不升链)。最少系统数 = 最小链覆盖 = 最大反链 = 最长严格上升子序列长度。
讲课提示:Dilworth 是"最少几条链",对偶是"最少几条反链"。学生最容易搞混的就是"上升子序列"和"不升子序列"各自对应哪个,用导弹拦截固定住。
7.3 DAG 最小路径覆盖
不相交路径覆盖:每个点恰在一条路径上。把每个点拆成出点 \(u^+\) 和入点 \(u^-\),边 \((u,v)\) 连 \(u^+ \to v^-\),则
可相交路径覆盖:先求传递闭包(Floyd 位运算),再按不相交做。这就是 Dilworth 的算法实现。
7.4 Hall 定理
二分图 \((X, Y)\) 存在覆盖 \(X\) 的匹配 \(\iff\) 对任意 \(S \subseteq X\),\(|N(S)| \ge |S|\)。
用法:证明某类图一定有完美匹配(如 \(k\)-正则二分图),或在题目里把"存在匹配"转化为"对所有子集检查邻域大小",后者常常可以用性质缩小到 \(O(n)\) 个关键子集。
7.5 König 定理与相关等式
二分图中:
一般图:最大独立集 \(+\) 最小点覆盖 \(= |V|\)(互补)。
例题:洛谷 P3355 骑士共存问题。棋盘黑白染色,马只在异色格之间攻击,二分图最大独立集 = 格子数 − 最大匹配。
7.6 Sperner 定理
\(\{1..n\}\) 的子集族中,若两两互不包含,则大小至多 \(\dbinom{n}{\lfloor n/2 \rfloor}\)。
(布尔格上的最大反链,取中间层。)
7.7 Ramsey 数
\(R(3,3) = 6\):6 个人中必有 3 人互相认识或 3 人互相不认识。证明:任取一人,其余 5 人中至少 3 人与他关系相同,再讨论这 3 人。\(R(4,4) = 18\),\(R(5,5)\) 未知(\(43\) 到 \(48\) 之间)。竞赛里只考 \(R(3,3)\) 的证明思路。
7.8 欧拉回路条件
- 无向图:连通且所有点度数为偶(回路);恰两个奇点(路径)。
- 有向图:弱连通且所有点入度 = 出度(回路);恰一点出 − 入 \(= 1\)、一点入 − 出 \(= 1\)(路径)。
8. 常见错误清单
- 隔板法正整数 / 非负整数混淆。 正整数 \(\binom{n-1}{k-1}\),非负 \(\binom{n+k-1}{k-1}\)。
- 圆排列忘记除 \(n\)。 旋转等价是 \((n-1)!\),若还有翻转再除 2(\(n \ge 3\))。
- 卡特兰"不越过"与"不接触"。 不越过对角线是 \(C_n\),不接触(严格在一侧)是 \(C_{n-1}\)。
- EGF 与 OGF 混用。 有标号用 EGF,无标号用 OGF;EGF 乘法带 \(\binom{n}{k}\)。
- Prüfer 度数性质记反。 出现次数 \(= d - 1\),叶子不出现。
- 矩阵树有向图内向 / 外向搞反。 外向树用入度矩阵。
- Dilworth 与对偶用错。 最少链 = 最大反链;最少反链 = 最长链。
- LGV 忘记检查只有恒等置换。 若起点终点不单调,行列式含负项,不能直接当计数。
- 五边形数定理漏掉负 \(k\)。 \(k\) 取遍 \(\pm1, \pm2, \dots\),广义五边形数 \(1, 2, 5, 7, 12, 15, \dots\)。
- 斯特林数上下标。 \(S(n,k)\) 的 \(n\) 是元素数,\(k\) 是块数,\(k > n\) 时为 0。
9. 课堂练习
- 10 个相同球放 4 个不同盒子,允许空盒。(答:\(\binom{13}{3} = 286\))
- 证明 \(\sum_{k}k\binom{n}{k} = n2^{n-1}\),分别用吸收恒等式和求导两种方法。
- 求 \(a_n = 3a_{n-1} - 2a_{n-2}\),\(a_0 = 0, a_1 = 1\) 的通项。(答:\(2^n - 1\))
- 写出 \(C_5 = 42\) 对应的"\(5\) 对括号"中以
((开头的个数。(答:\(C_5 - C_4 = 42 - 14 = 28\)) - 计算 \(S(5,2)\) 与 \(s(5,2)\)。(答:15 与 50)
- 计算 \(B_5\)。(答:52)
- 由 Prüfer 序列 \((3,3,1)\) 还原 5 个点的树。(答:边 \(\{2,3\},\{4,3\},\{3,1\},\{1,5\}\))
- 一个 \(3 \times 3\) 网格图的生成树数。(答:192)
- 序列 \(5, 3, 8, 1, 9, 2\) 的最少不升子序列覆盖数。(答:3,最长上升子序列 \(3,8,9\))
- 证明 \(R(3,3) \le 6\)。
10. 推荐题单
| 难度 | 题目 | 考点 |
|---|---|---|
| 入门 | 洛谷 P2822 [NOIP2016] 组合数问题 | 杨辉三角 + 前缀和 |
| 入门 | 洛谷 P1020 [NOIP1999] 导弹拦截 | Dilworth |
| 入门 | 洛谷 P1044 [NOIP2003] 栈 | 卡特兰 |
| 基础 | 洛谷 P3200 [HNOI2009] 有趣的数列 | 卡特兰 + 质因数分解求模 |
| 基础 | 洛谷 P6086 【模板】Prüfer 序列 | Prüfer |
| 基础 | 洛谷 P6178 【模板】Matrix-Tree 定理 | 矩阵树 |
| 基础 | 洛谷 P2762 太空飞行计划 | 最小割 / König |
| 基础 | 洛谷 P3355 骑士共存问题 | 最大独立集 |
| 基础 | 洛谷 P2764 最小路径覆盖问题 | 拆点匹配 |
| 提高 | 洛谷 P6657 【模板】LGV 引理 | LGV |
| 提高 | 洛谷 P5395 【模板】第二类斯特林数·行 | NTT |
| 提高 | 洛谷 P5408 【模板】第一类斯特林数·行 | 倍增 NTT |
| 提高 | 洛谷 P4389 付公主的背包 | 多项式 exp |
| 提高 | 洛谷 P5807 【模板】BEST 定理 | 欧拉回路计数 |
| 提高 | 洛谷 P4931 情侣?给我烧了! | 错排变形 |
| 挑战 | 洛谷 P4841 城市规划 | 多项式 ln |
| 挑战 | 洛谷 P6667 [清华集训2016] 如何优雅地求和 | 下降幂多项式 |
附录:一页纸总结
思路检查表:有标号 → EGF / Prüfer / 矩阵树;无标号 → OGF / Burnside;"不相交" → LGV;"最少几条链" → Dilworth;"存在匹配" → Hall。

浙公网安备 33010602011771号