容斥学习笔记

1|0容斥

基本公式
|i=1nai|=T[1,n]1|T|+1|iTai|

1|0min-max容斥

maxiSai=TS(1)|T|+1miniTai

miniSai=TS(1)|T|+1maxiTai

1|0二项式反演

二项式反演用于解决“某种物品恰好若干个”这类的问题,与容斥原理类似。

一般形式:若gn=i=0n(ni)fi,那么有fn=i=0n(ni)(1)nigi

证明:将gi展开,得

fn=i=0n(ni)(1)nij=0i(ij)fj=j=0nfji=jn(ni)(ij)(1)ni=j=0nfji=jn(nj)(njij)(1)ni=j=0nfj(nj)k=0nj(njk)(1)njk=j=0nfj(nj)k=0nj(njk)(1)njk1k=j=0nfj(nj)(1+1)nj=j=0nfj(nj)[nj==0]=fn

一般的二项式反演形式有两种,一是gn表示至多n个的方案数,fn表示恰好n个的方案数,那么有

gn=i=0n(ni)fifn=i=0n(ni)(1)nigi

二是gn表示至少n个的方案数,fn表示恰好n个方案数,那么有

gj=i=jn(ij)fifj=i=jn(1)ij(ij)gi

1.P8329 [ZJOI2022] 树

题意:定义两颗树是好的当且仅当第1棵树每个点父亲编号小于它,第2棵树每个点父亲编号大于它,每个点恰好在一棵树上是叶子,求对1~n 求方案数。

思路:(不会容斥,好似) 首先考虑设 f(S) 表示第 1 棵树非叶集合为 S 的方案数,第二棵树为 g(S),那么很容易推出

ans=ST=,ST={1,2,n}f(S)g(T)

但是 f(S)g(S) 并不方便直接求,我们考虑容斥。设 f(S) 表示第一棵树非叶集合 S 的方案数,g(S) 同理,那么可知

ans=ST=,ST={1,2,n}f(S)g(T)=ST=,ST={1,2,n}SS,TTf(S)g(T)(1)|S||S|+|T||T|=ST=f(S)g(T)(1)n|S||T|2n|S||T|=ST=f(S)g(T)(2)n|S||T|

这样似乎比之前的恰好更好处理一些。于是我们设 dp[i][j][k] 表示 |{1,2,i}S|=j,|{i+1,i+2,n}T|=k 的方案数。转移时根据 i 是属于 S 还是 T 还是都不属于进行分类讨论即可。

复杂度 O(n3)

2.P2332 [SCOI2006] 数字立方体

题意:有多少子立方体的和是 m 的倍数。

思路:算是神秘优化。

朴素的做法是 O(n6) 的,要枚举两个坐标,考虑怎么优化。

如果确定了两维,那么就可以用桶记录下确定这两维后的所有和,此时满足条件的个数就是相同的和的个数的平方和,可以 O(n) 统计,于是复杂度就是 O(n5)

3.P8292 [省选联考 2022] 卡牌

题意:小 A 有 n 张卡牌,编号为 1,2,,n。每张卡牌上写着一个正整数,第 i 张卡牌上的正整数为 si

现在有 m 轮游戏,第 i 轮游戏会给出 ci 个质数,小 A 需要选择任意多张卡牌,使得这些卡牌上面的正整数的乘积能被该轮游戏给出的每个质数整除。求有多少种方案。

思路:首先,可以想到用所有答案减去不合法的答案,不合法的方案也可以再容斥,就是不含某一个质数的方案数减去不含两个质数的方案数,依次类推。于是就有暴力枚举质因数的做法。

但是质因数还是很多,不能直接状压,这就让我们想到了 [NOI2015] 寿司晚宴,这题的做法是根分,小于根号部分的质数很少,可以状压,而且最多只有一个大于根号的质因子。

这题同样可以根分。小于根号部分的质因子只有 13 个,大于的部分,可以单独考虑,即如果这个质数被给出,那么方案数就是 2cnt[i]1,否则就是 2cnt[i]。小于的部分,我们可以暴力容斥,求出每个不含质因子的集合的答案,乘上容斥系数再求和即可。


__EOF__

本文作者Xttttr
本文链接https://www.cnblogs.com/Xttttr/p/18016298.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Xttttr  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示