二项式反演学习笔记

前置知识

二项式定理:\((a+b)^n=\sum_{i=0}^n\binom{n}{i}a^ib^{n-i}\)

二项式反演

反演公式1:

\[f(n) = \sum_{i=0}^n\binom{n}{i}g(i) \iff g(n)=\sum_{i=0}^n(-1)^{n-i}\binom{n}{i}f(i) \]

证明:

\[\begin{aligned} \sum_{i=0}^n(-1)^{n-i}\binom{n}{i}f(i) &= \sum_{i=0}^n(-1)^{n-i}\binom{n}{i}\sum_{j=0}^i\binom{i}{j}g(j)\\ &= \sum_{j=0}^ng(j)\sum_{i=j}^n(-1)^{n-i}\binom{n}{i}\binom{i}{j}\\ \end{aligned} \]

然后我们需要应用到组合数的一个结论:

\[\binom{n}{i}\binom{i}{j}=\binom{n}{j}\binom{n - j}{i - j} \]

尝试用组合意义理解:我们要在 \(n\) 个数中选一个 \(i\) 元子集 \(A\),再选一个属于 \(A\)\(j\) 元子集 \(B\),左边就是先选 \(A\) 再选 \(B\),右边是先选 \(B\) 再选 \(A\),所以两者相等。

所以:

\[\begin{aligned} \sum_{j=0}^ng(j)\sum_{i=j}^n(-1)^{n-i}\binom{n}{i}\binom{i}{j} &=\sum_{j=0}^ng(j)\sum_{i=j}^n(-1)^{n-i}\binom{n}{j}\binom{n-j}{i-j}\\ &=\sum_{j=0}^ng(j)\binom{n}{j}\sum_{i=j}^n(-1)^{n-i}\binom{n-j}{i-j}\\ &=\sum_{j=0}^ng(j)\binom{n}{j}\sum_{i=0}^{n-j}(-1)^{n-(i+j)}\binom{n-j}{(i+j)-j}\\ &=\sum_{j=0}^ng(j)\binom{n}{j}\sum_{i=0}^{n-j}(-1)^{(n-j)-i}\binom{n-j}{i}\\ &=\sum_{j=0}^ng(j)\binom{n}{j}(1-1)^{n-j}\\ &=g(n) \end{aligned} \]

得证。

反演公式2:

\[f(n)=\sum_{i=0}^n\binom{n}{i}(-1)^{i}g(n) \iff g(n)=\sum_{i=0}^n\binom{n}{i}(-1)^{i}f(n) \]

反演公式3:

\[f(k)=\sum_{i=k}^n\binom{i}{k}g(i) \iff g(k)=\sum_{i=k}^n(-1)^{i - k}\binom{i}{k}f(i) \]

应用

关键:要求 \(g(n)\),尝试找到 \(f(n) = \sum_{i=0}^n\binom{n}{i}g(i)\)\(f(n)\) 便于计算,然后用反演求出 \(g(n)\)

题目一般会要求类似满足恰好 \(k\) 个性质的方案的个数,这个时候就很适合用二项式反演。

求错排

思路:

这个经典问题可以用二项式反演来做。

我们让 \(f_n=n!\)\(D_n\) 表示错排数。

则会有:

\[f_n=\sum_{i=0}^n\binom{n}{i}D_i \]

还是组合意义来理解,每个排列都有若干个位置满足 \(p_i=i\),我们先枚举有多少个位置,再枚举哪些位置,剩下的必然是错排了。

于是我们可以直接二项式反演:

\[\begin{aligned} D_n &=\sum_{i=0}^n(-1)^{n-i}\binom{n}{i}f_i\\ &=\sum_{i=0}^n(-1)^{n-i}\frac{n!}{i!(n-i)!}i!\\ &=\sum_{i=0}^n(-1)^{n-i}\frac{n!}{(n-i)!}\\ &=n!\sum_{i=0}^n\frac{(-1)^{n-i}}{(n-i)!}\\ &=n!\sum_{i=0}^n\frac{(-1)^{i}}{i!}\\ \end{aligned} \]

染色

\(n\) 个格子排成一行,需要用 \(k\) 种颜色染色,要求两两不同色且每种颜色至少出现一次。求方案数。

思路:

我们设 \(f_k\) 表示用 \(k\) 种颜色染色两两不同色,但是不要求每种颜色至少出现一次。

再设 \(g_k\) 表示表示用 \(k\) 种颜色染色两两不同色,要求每种颜色至少出现一次。

于是我们有:

\[f_k=\sum_{i=0}^k \binom{k}{i}g_i \]

如何理解?首先对于任何一种染色方案,我们必然是选取了 \(k\) 颜色的一个子集去染,枚举选了哪些子集即可。

至于 \(f_k\),这其实是 HNOI越狱 这题,我们可以知道 \(f_k=k(k-1)^{n-1}\),于是:

\[g_k=\sum_{i=0}^k(-1)^{k-i}\binom{k}{i}i(i-1)^{n-1} \]

然后就做完了。

求第二类斯特林数。

思路:

首先假设盒子有区别。

同理,\(f_k\) 表示盒子可以为空,\(g_k\) 表示盒子不能为空,可以得到:

\[f_k = \sum_{i=0}^k\binom{k}{i}g_i \]

又由于 \(f_k = k^m\),所以反演一下就能得到答案。

BZOJ 2839 集合计数

用二项式反演转化成至少 \(k\) 个,显然答案是 \(\binom{n}{k}2^{2^{n - k}}\),注意对指数取模要用模数减一。

posted @ 2024-01-20 13:42  rlc202204  阅读(18)  评论(0编辑  收藏  举报