【题解】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)}\)

于是二项式反演一下:

\[\begin{aligned} dp_i&=\sum_{j=1}^if(j)\\ &=\sum_{j=1}^i\sum_{k=j}^{i}{k\choose j}(-1)^{k-j} g(k)\\ &=\sum_{j=1}^i\sum_{k=j}^{i}{k\choose j}(-1)^{k-j}{i\choose k}dp_{i-k}2^{k(i-k)}\\ &=\sum_{k=1}^i{i\choose k}dp_{i-k}2^{k(i-k)}\sum_{j=1}^{k}{k\choose j}(-1)^{k-j}1^j&【\text{换求和顺序}】\\ &=\sum_{k=1}^i{i\choose k}dp_{i-k}2^{k(i-k)}(0-(-1)^k)&【\text{二项式定理(需要补 0 次项)}】\\ &=\sum_{k=1}^i(-1)^{k-1}{i\choose k}dp_{i-k}2^{k(i-k)} \end{aligned} \]


或者直接考虑容斥(再一次体现了容斥和二项式定理本质是相同的。

就是上面的最后一个式子。


「BZOJ4665」小w的喜糖

将每个人的拥有的糖都都视作互不相同的。这样才能用二项式反演来容斥。

考虑 dp。

\(dp[i][j]\):前 \(i\) 中糖,至少 \(j\) 个不变。

有如下转移:

\[dp[i][j]=\sum_{k=0}^n dp[i-1][j-k]{cnt[i]\choose k}A(cnt[i],k) \]

相当先无序的选出 \(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)\) 即可。

这种拆模数的方法有点启发意义,虽然不是容斥但还是放在这里了

posted @ 2024-07-20 11:16  CloudWings  阅读(9)  评论(0编辑  收藏  举报