二项式反演
二项式反演
本质上与广义容斥定理做的事情相同。
什么是反演
我们称一对关于序列的正向与逆向操作为一种反演(Inversion)。
具体的,前缀和与差分就可以被看作是一种反演。
公式
1、前缀和型:
对于非负整数 \(n\),若数列 \(f_n,g_n\) 满足:
则必有:
反之亦然。
2、后缀和型(常用):
对于 \(0 \le k \le n\),若数列 \(f_k,g_k\) 满足:
则必有:
反之亦然。
这个证明同广义容斥原理,此处略去。
应用
第二类斯特林数:
定义 \(g_k\) 为恰好 \(k\) 个盒子为空的方案数,\(f_k\) 为“至少” \(k\) 个盒子为空的方案数。目标显然是求 \(g_0\)。
有 \(f_k = {m \choose k} (m-k)^n\),代入公式即得答案为 \(S(n,m) \times m!\)。
染色问题:

注意点
识别题目:\(f_k\) 好求(可使用组合公式 / dp),\(g_k\) 不好求。
易错:\(f_k\) 是“所有 \(k\) 元固定集合的方案数之和“,一个恰好 \(i\) 个的方案会被算 \(i \choose k\) 次。
二元二项式反演
前缀和型
后缀和型(常用)
例题选讲
-
P5505 [JSOI2011] 分特产(插板法虚拟位置技巧)
-
P10597 BZOJ4665 小 w 的喜糖(先看作互异的策略)
注意到如果糖果互异,则该问题与错排问题类似。
我们考虑将这些糖果看作互不相同,则答案就是我们算出来的除以 \(\prod^{n}_{i=1} c_i\),其中 \(c_i\) 表示第 \(i\) 种糖果的个数。
令 \(g(i)\) 表示 恰好 \(i\) 个人拿到原始糖果的方案数。答案显然是 \(g(0)\)。
\(f(i)\) 则表示 至少 \(i\) 个人拿到原始糖果的方案数。
依旧考虑 dp 计算 \(f(i)\)。定义 \(dp_{i,j}\) 表示前 \(i\) 个种类有 \(j\) 个人拿到原来糖果的方案数。套路的,我们需要钦定前面 \(c_i\) 个人中的 \(k\) 个人出来拿原始糖果,还要从 \(c_i\) 个糖果中拿出 \(k\) 个糖果分出去,然后这些糖果可以重排,因此贡献为 \({c_i \choose k}^2 \times k!\)。
因此可得转移方程:
于是,边界 \(dp_{0,0}=1\),\(f(i)=dp_{n,i}\),搞定。
- P6478 [NOI Online #2 提高组] 游戏(树形 dp 求取 \(f(i)\))
令 \(g(i)\) 表示 恰好 \(i\) 个非平局面的方案数。答案显然是 \(g(k)\)。
\(f(i)\) 则表示 至少 \(i\) 个非平局面的方案数
考虑树形 dp 计算 \(f(i)\)。定义 \(dp_{i,j}\) 表示以 \(i\) 为根的子树内有 \(j\) 个和它颜色不同的节点的方案数。转移根据乘法原理,就是 \(dp_{i,j}=\prod_{k_1+k_2+...k_{siz}=j} dp_{son_i,k_i}\),然后还得加上根节点单独的贡献 \(dp_{i,j} = dp_{i,j-1} \times (cnt_i-j+1)\)。最后 \(f(i)=dp_{1,i}\)。
写代码时注意 dp 数组的干扰问题,可以设计 tmp 数组临时转移再赋值解决。
-
P6076 [JSOI2015] 染色问题(多元二项式模板,注意 \(n^m\) 计数的时候小心底数和指数别弄反了!!!)
-
P3298 [SDOI2013] 泉(转换研究对象的思想 & 哈希状压)
暴力求取 \(f(i)\) 是 \(\mathcal{O}(n^2)\) 的,不可行。
这个时候我们考虑转换研究对象,从年份转为泉区。
注意到泉区的个数为 \(6\),想到枚举出所有的 \(2^6\) 个取位置的情况,我们现在只关注于这些位置。然后我们对每个年份求出对应位置的哈希值并排序,对于一个极长连续段(哈希值相等),它的贡献就是 \(\frac{siz \times (siz-1)}{2}\),将其加入 \(f_{siz}\) 即可,其中 \(siz\) 表示这个段的长度。
浙公网安备 33010602011771号