二项式反演
创建时间:2026-01-02
二项式反演的概念
对于形如“\(n\) 个元素中恰好 \(k\) 个满足某条件的方案数”的计数问题,设其方案数为 \(f(k)\),则令函数 \(g(k)\) 表示“钦定某 \(k\) 个元素满足条件,其他任选的方案数(非钦定元素也可能满足条件,即可能不止 \(k\) 个满足条件)”。
具体的,有:
在有些题目中,\(f(k)\) 并不容易直接计算,相反的,我们更容易得到 \(g(k)\) 的值,这是就需要一个由 \(g(k)\) 计算 \(f(k)\) 的方法,我们将其称为二项式反演。
二项式反演及证明
二项式反演的形式一:
如果我们能证明右式可以化简为 \(f(k)\),则上式得证。
不妨直接将定义式带入公式,即
交换求和顺序,得:
根据组合意义:\(C_i^k C_j^i\),即 \(C_j^i C_i^k\) 可以表示为先从 \(j\) 个中选 \(i\) 个,再从选出的 \(i\) 个里面选 \(k\) 个。也等于先从 \(j\) 个中分别选 \(k\) 个,再在剩下的 \(j-k\) 个中选 \(i-k\) 个,随后把选出的两组合并为 \(i\) 个,所以 \(C_i^k C_j^i = C_j^k C_j^{i-k}\)。
故
当 \(j=k\) 时,\(\sum_{i=0}^{j-k} (-1)^i C_{j-k}^i = 1\);当 \(j>k\) 时,根据二项式定理,\(\sum_{i=0}^{j-k} (-1)^i C_{j-k}^i = (-1)^{j-k} = 0\)。
所以
证毕。
上面是二项式反演的形式一,即上求和形式。类似的,二项式反演还有一个形式二,即下求和形式:
令 \(g(k) = \sum_{i=0}^n C_i^k f(i)\),则 \(f(k) = \sum_{i=0}^k C_k^i g(i)\),证明方法同形式一,这里不展开细写。
实际做题中大部分都使用形式一。
二项式反演的应用
众所周知,错位排序问题可以通过 DP 解决,递推式为 \(dp_n = (n-1)(dp_{n-1} + dp_{n-2})\)。那如果要求其封闭形式呢?
设 \(f(n)\) 为恰好 \(n\) 个位置非错位,则现要求 \(f(0)\)。
根据二项式反演形式一:\(f(0) = \sum_{i=0}^n (-1)^i C_i^0 g(i) = \sum_{i=0}^n (-1)^i g(i)\)。而 \(g(i)\) 为钦定 \(i\) 个位置上不错位的方案数,故显然 \(g(i) = C_n^i (n-i)!\),所以 \(f(0) = \sum_{i=0}^n (-1)^i C_n^i (n-i)! = \sum_{i=0}^n (-1)^i \frac {n!} {i! (n-i)!} (n -i)! = n! \sum_{i=0}^n \frac {(-1)^i} {i!}\)。
综上:\(dp_n = n! \sum_{i=0}^n \frac {(-1)^i} {i!}\)。
除了错位排序,二项式反演的另一个经典应用就是求解第二类斯特林数:设 \(n \brace m\) 表示将 \(n\) 个不同小球放入 \(m\) 个本质相同的盒子,每个盒子都不能为空的方案数,求 \(n \brace m\)。
设 \(f(k)\) 表示恰好 \(k\) 个盒子是空的的方案数,现求 \(f(0)\)。
套用反演公式:\(f(0) = \sum_{i=0}^m (-1)^i C_i^0 g(i) = \sum_{i=0}^m (-1)^i g(i)\),又 \(g(i) = C_m^i (m-i)^n\),所以 \(f(0) = \sum_{i=0}^m (-1)^i C_m^i (m-i)^n\)。
即 \({n \brace m} = f(0) = \sum_{i=0}^m (-1)^i C_m^i (m-i)^n\),这边是第二类斯特林数的通项公式!
其他应用:
P4859 已经没有什么好害怕的了;
P10596 BZOJ2839 集合计数;
CF1342E Placing Rooks;
P6478 [NOI Online #2 提高组] 游戏;

浙公网安备 33010602011771号