突然就一点容斥都不会了... 重学一下
错位1
题目大意: (n) 个人 (n) 个位置, 求恰有 (0) 个人站在自己编号上的方案数
做法:
好算的东西是 (f[i] = inom n i (n-i)!)
(f[i]) 中还包含了一些 (jge i) 的方案.
我们给每个在 (f[i]) 时被算到的方案附上一个系数 (coef[i])
注意到每个 (j) 的方案会被 (i) 附上 (inom j i) 次系数.
而我们希望每个 (j
eq 0) 的方案被附上系数和为 (0), 反之为 (1) . 也就是说
这里 (coef[i] = (-1)^i)
错位2
题目大意: (n) 个人 (n) 个位置, 求恰有 (k) 个人站在自己编号上的方案数
做法:
沿用上题的思路
使用二项式反演得 (coef[i] = (-1)^{i-k} inom i k)
求容斥系数的一些方法:
- 二项式反演
(f(n) = sum_{i=0}^n inom n i g(i))
其中 (g) 为容斥系数, (f) 为我们希望每个位置被统计多少次, 那么
(g(n) = sum_{i=0}^n inom n i g(i) [n-i=0])
(g(n) = sum_{i=0}^n inom n i g(i) sum_{j=0}^{n-i} inom {n-i} j (-1)^j)
(g(n) = sum_{j=0}^n inom n j (-1)^j f(n-j))
(g(n) = sum_{j=0}^n inom n j (-1)^{n-j} f(j))
1') 另一个方向的二项式反演
(f(i) = sum_{j=i}^n inom j i g(j))
(g(j) = sum_{i=j}^n g(i) [i=j])
(g(j) = sum_{i=j}^n g(i) sum_{k=j}^i (-1)^{k-j} inom k j inom i k)
(g(j) = sum_{k=j}^n (-1)^{k-j} inom k j f(k))
-
暴力打表
用逐项确定的方法.
其实本质是多项式求逆 -
附上一个组合数的表.
0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
1 | -6 | ? | ? | ? | ? | ? |
1 | -5 | 15 | ? | ? | ? | ? |
1 | -4 | 10 | -20 | ? | ? | ? |
1 | -3 | 6 | -10 | 15 | ? | ? |
1 | -2 | 3 | -4 | 5 | -6 | ? |
1 | -1 | 1 | -1 | 1 | -1 | 1 |
1 | 1 | |||||
1 | 2 | 1 | ||||
1 | 3 | 3 | 1 | |||
1 | 4 | 6 | 4 | 1 | ||
1 | 5 | 10 | 10 | 5 | 1 | |
1 | 6 | 15 | 20 | 15 | 6 | 1 |
bzoj 黑暗的幻想乡
题目大意: (nle 17) 个点, 若干条边, 每条边颜色为 ([1, n-1]). 求每种颜色都恰好出现一次的生成树个数
做法:
暴力枚举每个颜色子集, (f[s]) 为只连 (s) 中的颜色的边进行 Matrix-tree计数 的结果
(s) 会给它的每个子集附上容斥系数
我们希望 $$[s=mask] = sum_{ssubseteq t} coef[t]$$
(coef[t] = (-1)^{|mask| - |t|})
前夕
题目大意:
(n le 10^7), 有 (0cdots 2^n-1) 这么些二进制数
要在里面选若干个, 使得交的大小为 (L(Lle 4)) 的倍数, 求方案数
做法:
(f[i] = inom n i 2^{2^{n-i}})
会包含 (jge i) 的情况, 每个被算 (inom j i) 次
跟之前的 错位2 一样, 要求恰好 (k) 时的容斥系数为 (coef[i] = (-1)^{i-k} inom i k)
这题我们要求 (L|k) 的所有 (k) 的和, 因此容斥系数为 (coef[i] = (-1)^i sum_{L|k} (-1)^{-k} inom i k)
(mod x^L) 意义下求 ((1-x)^i) 即可, 可以递推
同色段
题目大意: (c) 个颜色, (n) 个位置, 求同色段数恰为 (k) 的填色方案数
做法:
(f[i] = inom {n-1}{i-1} c^i)
这会包含 (j le i) 的情况, 每个被算 (inom {n-j}{i-j}) 次
需要满足等式为 $$[j=k] = sum_{i=j}^n inom {n-j}{i-j} coef[i]$$
(coef[i] = (-1)^{k-i} inom {n-i}{k-i})
2017山东一轮集训 苹果树
具体见 我2017山东一轮集训的博客.
主要是这题的容斥系数等式跟上题很像, 写出来对比一下
(coef[i] = (-1)^{i-k} inom{n-k}{i-k})
联通块
题目大意: (n le 12) 个点, 求恰好 (k) 个联通块的图的个数
做法:
Bell数枚举划分, 要求划分之间没有连边, 其他乱连.
对于划分 (i) , 可能导致继续划分, 成为 (j) , 每个 (j) 被算重 (egin{Bmatrix}|j|\|i|end{Bmatrix}) 种
(coef[i] = (-1)^{i-k} egin{bmatrix} i \ k end{bmatrix})
同色段2
题目大意:
(n) 种数字, 第 (i) 种数字有 (c_i) 个.
求用完所有数字的所有方案中, 同色段长度的乘积 的和是多少
做法:
之前的题都是 "方案数". 带上权值之后有两种方法:
- 保证每种方案在不同地方都以正确的权值被统计
- 把权值附在容斥系数等式上
这题用方法2
先 (dp) 预处理出 (sp[x][i]) 为将第 (x) 种数字分成 (i) 段时的段长乘积
考虑记 (i_x) 为 (x) 这种数字分成了多少段.
((i_1, cdots i_n)) 为一种可能的分段方法, 多项式系数把所有数字的段插起来
这样会包含 ((j_1le i_1, cdots, j_nle i_n)) 的划分方案, 记重次数为插板
独立出来就是 ([j=k] imes sp[k] = sum_{i=j}^n inom {i-1}{j-1} coef[i])
(coef[i] = (-1)^{k-i} inom{k-1}{i-1} sp[k])
因为这题不是求 "恰好", 我们把对于每个 (k) 的容斥系数累加起来即可.