前言:
组合数学真难
真·前言:
至少需要会分治 FFT/NTT 等操作,最好要会多项式全家桶。(不然你斯特林数都求不了
二项式反演可以复习一下。
斯特林数的系数会因为简便的写法有时候会非法,这个时候统统看作 \(0\),对答案不造成影响。
草稿纸和笔必备,随时准备推式子。
基础知识
1. 组合式子扩展与组合恒等式:
- \({n \choose m } = {n \choose n - m}\)
- \({n \choose m} = {n - 1\choose m} + {n - 1 \choose m - 1}\)
- \(\sum_{i =0} ^ n {n \choose i} = 2^n\) 其中奇数项之和等于偶数项之和 \((n \neq 0)\)。
- \(k\) 个非负整数的和为 \(n\) 的方案数: \(n + k - 1 \choose k - 1\)
- 走格子到 (n,m) / 个数为 \(n\) 且单调不下降的序列最后一个数大小为 \(m\) 的方案数 : \(n + m \choose n\)
- 上一条的扩展: \(\sum_{i = 0} ^ m {n + i \choose i} = {n+m+1\choose m}\) 特别的: \(\sum_{i = k}^m {i \choose k} = {m + 1 \choose m - k}\)
- \({n\choose m} * {m\choose k} = {n \choose k}*{n - k \choose m - k}\)
- \(\sum_{i = 0}^k {n\choose i}*{m \choose k - i} = {n + m\choose k}\)
- \(n^{\underline{m}} = {n\choose m} * m!\)
2. 斯特林数
第一类斯特林数:即 \(n\) 个不同的数分成 \(m\) 个非空环排列的方案数,记作: \(\begin{bmatrix} n \\ m \end{bmatrix}\)
递推公式:\(\begin{bmatrix} n \\ m \end{bmatrix} = \begin{bmatrix} n - 1 \\ m - 1 \end{bmatrix} + (n - 1) * \begin{bmatrix} n - 1 \\ m \end{bmatrix}\)
第二类斯特林数:即 \(n\) 个不同的数分成 \(m\) 个非空集合的方案数,记作:\(\begin{Bmatrix} n \\ m \end{Bmatrix}\)
递推公式:\(\begin{Bmatrix} n \\ m \end{Bmatrix} = \begin{Bmatrix} n - 1 \\ m - 1 \end{Bmatrix} + m *\begin{Bmatrix} n - 1 \\ m \end{Bmatrix}\)
通项公式:\(\begin{Bmatrix} n \\ m \end{Bmatrix} = \frac {1}{m!} \sum_{i = 0}^m (-1)^i {m\choose i}(m - i)^n\)
上升幂:\(n^{\overline{m}}\)
下降幂:\(n^{\underline{m}}\)
3. 自然数幂的处理:
记 : \(S_k(n) = \sum_{i = 1} ^n i^k\)
- 拉格朗日插值: \(y = \sum y_i\sum _{j \neq i} \frac{X-x_j}{x_i - x_j}\)
- \(S_k(n) = \frac{(n + 1)^{\underline k + 1}}{k + 1} - \sum_{i = 0}^{k - 1} (-1)^{k - i}\begin{bmatrix} k \\ i \end{bmatrix} S_i(n)\)
- 补:$n^{\underline m} = \sum_{i = 0}^m (-1)^{m - i}\begin{bmatrix} m \ i \end{bmatrix} n^i $
- \(n^m = \sum_{i = 0}^{m}\begin{Bmatrix} m \\ i \end{Bmatrix} n^{\underline i}\)
- \(n^{\overline m} = \sum_{i=0}^m\begin{bmatrix} m \\ i \end{bmatrix}n^i\)
4. 第一/二类数的行与列求法:(至少要了解最常见的求法)
之前已经可以 \(O(m)\) 求 \(\begin{Bmatrix} n \\ m \end{Bmatrix}\) 单项。
第二类斯特林数行:\(\begin{Bmatrix} n \\ i \end{Bmatrix}\)
1. 直接看通项,卷就是了!
2. 通常幂转下降幂 -> \(n^m = \sum_{i = 0}^{m}\begin{Bmatrix} m \\ i \end{Bmatrix} n^{\underline i}\) 进行二项式反演-> NTT
第一类斯特林数行: \(\begin{bmatrix} n \\ i \end{bmatrix}\)
构造 \(\prod_{i=1}^m (x+i-1)\) 使用分治 FFT (\(O(nlog^2n)\)) / 构造 \(g(n)=\prod_{i=1}^m(x+i-1+n)\) 倍增 \(O(nlogn)\)。
第二类斯特林数列:\(\begin{Bmatrix} i \\ m \end{Bmatrix}\)
考虑 \(H_k(x) = \sum_{i = 0} \begin{Bmatrix} i \\ k \end{Bmatrix}x^i\) + 递推式
\(H_k(x)=\prod\limits_{i=1}^k\dfrac{x}{1-ix}=x^k\left(\prod\limits_{i=1}^k(1-ix)\right)^{-1}\)
求逆 + 倍增。
第一类斯特林数列:\(\begin{bmatrix} i \\ m \end{bmatrix}\)
\(F(x) = \frac{(−ln(1−x))^k}{k!}\)
我不会!长大后再学习!
5. 斯特林反演:
引理1:
$ x^{\underline{n}} = (-1)^n (-x)^{\overline n},x^{\overline{n}} = (-1)^n (-x)^{\underline n} $
引理2:
$ \sum_{k = m}n(-1){n-k}\begin{bmatrix} n \ k\end{bmatrix}\begin{Bmatrix} k \ m \end{Bmatrix} = [m = n] $
$ \sum_{k = m}n(-1){n - k}\begin{Bmatrix} n \ k \end{Bmatrix}\begin{bmatrix} k \ m \end{bmatrix} = [m=n] $
结论:
$ f(n) = \sum_{k=0}^n\begin{Bmatrix} n \ k \end{Bmatrix}g(k) \Leftrightarrow g(n) = \sum_{k = 0}n(-1){n - k}\begin{bmatrix} n \ k \end{bmatrix}f(k) $
6. 你已经学会了斯特林反演了,试一试!
-
例题:[2018雅礼集训1-16] 方阵
提交地址:https://vjudge.net/problem/TopCoder-13444
题意 : 给出一个 \(n\times m\) 的矩阵,每个位置可以填上 \([1,c]\) 中的任意整数。
要求填好后任意两行互不等价,且任意两列互不等价。两行或两列等价当且仅当对应位置完全相同,求方案数。
$n,m\leq 4000 $.
-
题解:先考虑行满足的情况,设 \(g(m)\) 表示有 \(n\) 行互不相同,\(m\) 列的方案数。
\(f(m)\) 表示有 \(n\) 行互不相同, \(m\) 列也互不相同的方案数。
\(g(m) = (c^m)^{\underline n}\) ,\(g(m) = \sum_{i = 0}^m \begin{Bmatrix} m \\ i \end{Bmatrix}f(i)\)
暴力计算就好力!!1
-
例题: 我也不知道出处,欢迎 dalao 写完后造数据。
**题意 **:给定 \(n\) 个节点的树,从某个点出发开始随机游走:在点 \(u\) 时,有 \(p_u\) 的概率留在原地,否则等概率的向相邻的点移动,直到移动到 \(1\) 号点停下。 求从每个点出发直至停下,所花费的时间的 \(k\) 次方的期望。
$ n ≤ 10^5,k ≤ 10^5,n · k ≤ 10^6$。
-
题解: 设随机变量 \(C_u\) 表示 \(u\) 点到 \(1\) 点的时间。尝试大力推式子。
存在 \(k\) 次方,考虑通常幂 -> 下降幂。
考虑拆解 \({C_u \choose i}\) ,有 \(C_u = p_u(C_u + 1) + \sum_v\frac{1 - p_u}{d_u}(C_v + 1)\)
组合恒等式,然后再考虑变换式子。
一个点由四周更新,考虑父亲节点值与当前节点值的差分。
大力递推,最后再算一下第二类斯特林数行就好力!
7. 烧边定理:
谜语:设 \(G\) 是一个作用在集合 $X $上的有限群。对 \(g ∈ G\),设 \(X_g\) 表示 \(X\) 中 在 \(g\) 作用下的不动元素,则轨道数 \(|X/G|\) 满足: \(|X/G| = \frac 1 {|G|} \sum_{g∈G}|Xg|\) 。
大概就是大力推式子吧。
-
例题:AtCoder Regular Contest 062 F
题意: 给出无向图 $ G = (V, E)$,对边染 $K $种颜色之一。 一个环上面的边旋转后得到的染色方案视为相同,求不同的染色方案数。
\(1 ≤ N ≤ 50,1 ≤ M ≤ 100,1 ≤ K ≤ 100\)。
简单版本:求单独一个环上的方案数。
题解:
主要是复合环上的不好考虑,官方题解给出了很好的一张图片。
8. 为勇者留下的题目
CF932E Team Work (数据只有样例能人志士们快来造!