1. 二项式反演
1.1. 公式
1.2. 一些题
例 1.
( ext{[NOI Online #2] })游戏
考虑 "钦定 (k) 次非平局" 枚举到的 "恰好 (k') 次非平局" 满足 (k’>k),我们考虑用第三个反演:设 (f(n)) 为钦定 (n) 次非平局的方案数,(g(n)) 为恰好 (n) 次非平局的方案数。
对于 (f(n)) 的求法,令 (dp_{i,j}) 为在 (i) 的子树内钦定 (j) 次非平局的方案数。用树型背包转移(之前在博客证明过)是 (mathcal O(n^2)) 的。注意还要做 (i) 和子树内未匹配点的匹配。
套路地设 (f(x,y,k)) 为有 (x) 行 (y) 列至少一个被染,有 (k) 种颜色至少染了一个格子方案数,(g(x,y,k)) 就是恰好。然而 (f(x,y,k)) 非常难算,因为行和列是会相互影响的,这给我们单纯枚举某行某列格子被染带来了困扰。
然后我继续尝试,设 (f(x,y,k)) 为至少有 (x) 行 (y) 列一个都没被染,有 (k) 种颜色至少染了一个格子方案数,(g(x,y,k)) 同理。那么((c+1) 是把不填也当作一种颜色),
具体意义就是将选定 (k) 种颜色先染一个格子,再让剩下的格子随便乱选。燃鹅,这个式子会算重。
不过可以考虑另外两种定义:设 (f(x,y,k)) 为至少有 (x) 行 (y) 列一个都没被染,有 (k) 种颜色 至多/没被 染了一个格子方案数,(g(x,y,k)) 同理。
对于至多,
没被染,
这两个式子最后反出来是一样的。
注:至多有 (x) 行 (y) 列被染也是可行的。
( ext{Update}):
发现自己完全没学懂… 其实 "有 (k) 种颜色至少染了一个格子" 的构造的本质问题不是算重,正常情况下甚至算重是被要求的。
先看看多步容斥:
(A_i) 表示满足条件 (i) 的元素集合,最终求得的结果只能是 "至少满足一个条件的元素集合" 或 "一个条件都不满足的元素集合"。
多数时候我们要求的是 "满足所有条件的元素集合",所以需要用到一个性质 —— 集合的并等于补集的交的补集。
对于这道题,我们可以选择计算 "恰好 (k) 种颜色至少染了一个格子" 或 "恰好 (k) 种颜色一个格子也没染"。由于要取补,选择计算第一个。设 (A_i) 为第 (i) 种颜色一个格子也没染的元素集合,这里的 "元素" 就是一种染色方案,显然在选取的过程中会算重,但是只要按公式算就没有问题。
而且我的列式都错了哇… (f(x,y,k)) 的计算不需要加组合数,组合数是模拟枚举集合的过程。