【题解】Solution Set - 容斥原理/二项式反演
【题解】Solution Set - 容斥原理/二项式反演
https://www.becoder.com.cn/contest/5400
「BZOJ2863」愤怒的元首
题目就是求 \(n\) 个点 DAG 的数量。
设 \(dp_i\) 表示 \(i\) 个点的 DAG 数量。
首先 DAG 一定存在出度为 \(0\) 的点,其次删去出度为 \(0\) 的点,仍构成一个 DAG。
所以我们可以枚举删去的数量,从而划分子问题。
\(g(n)\) 表示从 \(N\) 个不同元素 钦定/选至少 \(n\) 个元素形成特定结构的方案数;
\(f(n)\) 表示 恰好 使用 \(n\) 个不同元素(且这 \(n\) 个元素包含所有被钦定的)形成特定结构的总方案数。
具体地,\(dp_i=\sum\limits_{j=1}^i{i\choose j}dp_{i-j}2^{j(i-j)}\)
但是这样显然不对,因为后面算的实际上是至少,而我们需要的是恰好,即 \(g(j)={i\choose j}dp_{i-j}2^{j(i-j)}\)。
于是二项式反演一下:
或者直接考虑容斥(再一次体现了容斥和二项式定理本质是相同的。
就是上面的最后一个式子。
「BZOJ4665」小w的喜糖
将每个人的拥有的糖都都视作互不相同的。这样才能用二项式反演来容斥。
考虑 dp。
\(dp[i][j]\):前 \(i\) 中糖,至少 \(j\) 个不变。
有如下转移:
相当先无序的选出 \(k\) 个位置,然后再有顺序选出 \(k\) 个糖。
然后就可以二项式反演了。
最后的最后记得将答案除以每种糖的个数的阶乘。
https://www.becoder.com.cn/contest/5404
「HDU1098」Ignatius's puzzle
首先不难发现,\(x,a\in[0,64]\) 就能覆盖所有的情况。考虑枚举 \(a\),如果再直接枚举 \(x\)(65次
发现 \(65\) 不是质数,但是 \(65 = 5\times13\),所以要保证 \(5\mid f(x)\) 且 \(13\mid f(x)\) 即可。
这种拆模数的方法有点启发意义,虽然不是容斥但还是放在这里了