【题解】Solution Set - 容斥原理/二项式反演

【题解】Solution Set - 容斥原理/二项式反演

https://www.becoder.com.cn/contest/5400


「BZOJ2863」愤怒的元首

题目就是求 n 个点 DAG 的数量。

dpi 表示 i 个点的 DAG 数量。

首先 DAG 一定存在出度为 0 的点,其次删去出度为 0 的点,仍构成一个 DAG。

所以我们可以枚举删去的数量,从而划分子问题。

g(n) 表示从 N 个不同元素 钦定/选至少 n 个元素形成特定结构的方案数;

f(n) 表示 恰好 使用 n 个不同元素(且这 n 个元素包含所有被钦定的)形成特定结构的总方案数。

具体地,dpi=j=1i(ij)dpij2j(ij)

但是这样显然不对,因为后面算的实际上是至少,而我们需要的是恰好,即 g(j)=(ij)dpij2j(ij)

于是二项式反演一下:

dpi=j=1if(j)=j=1ik=ji(kj)(1)kjg(k)=j=1ik=ji(kj)(1)kj(ik)dpik2k(ik)=k=1i(ik)dpik2k(ik)j=1k(kj)(1)kj1j换求和顺序=k=1i(ik)dpik2k(ik)(0(1)k)二项式定理(需要补 0 次项)=k=1i(1)k1(ik)dpik2k(ik)


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

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


「BZOJ4665」小w的喜糖

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

考虑 dp。

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

有如下转移:

dp[i][j]=k=0ndp[i1][jk](cnt[i]k)A(cnt[i],k)

相当先无序的选出 k 个位置,然后再有顺序选出 k 个糖。

然后就可以二项式反演了。

最后的最后记得将答案除以每种糖的个数的阶乘。


https://www.becoder.com.cn/contest/5404


「HDU1098」Ignatius's puzzle

首先不难发现,x,a[0,64] 就能覆盖所有的情况。考虑枚举 a,如果再直接枚举 x(65次

发现 65 不是质数,但是 65=5×13,所以要保证 5f(x)13f(x) 即可。

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

posted @   CloudWings  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示