文章目录
- 前言
- 经典容斥原理
- 广义二项式反演/广义容斥
- min-max 容斥
所谓二项式反演,就是对两个项的式子进行反演。
(逃)
前言
期望和容斥是我的感性二兄弟!
之前的容斥我基本也都是靠感性理解做的…
感性理解就会导致:考场上试着写出一个式子,不知道它对不对。
然后就会有写出正确式子但是不敢敲代码,或者敲了半天过不去样例才明白自己的式子是错的(甚至还怀疑是不是代码写挂了)这样的悲剧发生(我都经历过)
前天差不多搞完了期望,今天轮到容斥了!
让我们暂时放下感性,拥抱数学。
PS:本篇有大量的数学语言,其中的一些变换来自与对式子实质的理解,直接硬看可能难以明白。建议看清楚大致思路后就按照自己的路子推一遍。(因为我就是这么做的)
经典容斥原理
我本来想叫它狭义容斥,但似乎有点瞧不起它…
就像经典力学不叫狭义力学一样。
抽象的内容如下:
假设有 kkk 个性质,满足每个性质的集合分别为 A1...kA_{1...k}A1...k,S={Ai∣1≤i≤k}S=\{A_i|1\le i\le k\}S={Ai∣1≤i≤k},那么就有:
∣⋂i=1kAi∣=∑T⊆S(−1)∣T∣×∣⋂i=1∣T∣Tiˉ∣|\bigcap_{i=1}^k A_i|=\sum_{T\subseteq S}(-1)^{|T|}\times|\bigcap_{i=1}^{|T|}\bar{T_i}|∣i=1⋂kAi∣=T⊆S∑(−1)∣T∣×∣i=1⋂∣T∣Tiˉ∣
证明:
设 GP={x∣∀Ai∈P,x∈Ai,∀Ai∉P,x∉Ai}G_P=\{x|\forall A_i\in P,x\in A_i,\forall A_i\notin P,x\notin A_i\}GP={x∣∀Ai∈P,x∈Ai,∀Ai∈/P,x∈/Ai},也就是恰好满足性质集合 PPP 的元素集合。
考虑每个 GGG 集合的统计次数,就有:
∑T⊆S(−1)∣T∣×∣⋂i=1∣T∣Tiˉ∣=∑P⊆S∣GP∣∑T∩P=∅(−1)∣T∣=∑P⊆S∣GP∣∑T⊆Pˉ(−1)∣T∣=∑P⊆SGP[Pˉ=∅]=∣⋂i=1kAi∣\sum_{T\subseteq S}(-1)^{|T|}\times|\bigcap_{i=1}^{|T|}\bar{T_i}|=\sum_{P\subseteq S}|G_P|\sum_{T\cap P=\emptyset}(-1)^{|T|}\\=\sum_{P\subseteq S}|G_P|\sum_{T\subseteq \bar{P}}(-1)^{|T|}=\sum_{P\subseteq S}G_P[\bar{P}=\emptyset]\\=|\bigcap_{i=1}^k A_i|T⊆S∑(−1)∣T∣×∣i=1⋂∣T∣Tiˉ∣=P⊆S∑∣GP∣T∩P=∅∑(−1)∣T∣=P⊆S∑∣GP∣T⊆Pˉ∑(−1)∣T∣=P⊆S∑GP[Pˉ=∅]=∣i=1⋂kAi∣
证毕。
广义二项式反演/广义容斥
通常是用来进行至多和恰好之间的转化。
本人非常不喜欢广义容斥这个名字。
因为感觉它有误导性,我很长时间都是按照容斥的角度硬理解,但是就用容斥三个圈套来套去的那点东西,把组合数说成几个里面选几个,硬考虑统计次数,似乎很难讲明白,也许其实也可以那么理解,只是我不会qwq。
我感觉还是从它的另一个叫法:广义二项式反演 的角度来理解更加简单。
定义 fxf_xfx 为至少选 xxx 个元素的方案数,gxg_xgx 为恰好选 xxx 个元素的方案数。
则有:
fx=∑i=xnCixgif_x=\sum_{i=x}^nC_i^x g_ifx=i=x∑nCixgi
然而,通常情况下,ggg 的值较难求出,而 fff 的值相对简单,这是就需要进行反演用 fff 求 ggg:
gx=∑i=xn(−1)i−xCixfig_x=\sum_{i=x}^n(-1)^{i-x}C_{i}^xf_igx=i=x∑n(−1)i−xCixfi
证明:
∑i=xn(−1)i−xCixfi\sum_{i=x}^n(-1)^{i-x}C_{i}^xf_ii=x∑n(−1)i−xCixfi
=∑i=xn(−1)i−xCix∑j=inCjigj=\sum_{i=x}^n(-1)^{i-x}C_{i}^x\sum_{j=i}^nC_j^ig_j=i=x∑n(−1)i−xCixj=i∑nCjigj
=∑j=xngj∑i=xj(−1)i−xCixCji=\sum_{j=x}^ng_j\sum_{i=x}^j(-1)^{i-x}C_i^xC_j^i=j=x∑ngji=x∑j(−1)i−xCixCji
=∑j=xngj∑i=xj(−1)i−xCjxCj−xi−x=\sum_{j=x}^ng_j\sum_{i=x}^j(-1)^{i-x}C_j^xC_{j-x}^{i-x}=j=x∑ngji=x∑j(−1)i−xCjxCj−xi−x
=∑j=xnCjxgj∑i=0j−x(−1)iCj−xi⋅1(j−x)−i=\sum_{j=x}^nC_j^xg_j\sum_{i=0}^{j-x}(-1)^{i}C_{j-x}^{i}\cdot1^{(j-x)-i}=j=x∑nCjxgji=0∑j−x(−1)iCj−xi⋅1(j−x)−i
=∑j=xnCjxgj[j=x]=\sum_{j=x}^nC_j^xg_j[j=x]=j=x∑nCjxgj[j=x]
=gx=g_x=gx
证毕。
类似的,若 fxf_xfx 为至多选 xxx 个元素的方案数,gxg_xgx 为恰好选 xxx 个元素的方案数。
则有:
fx=∑i=0nCxigif_x=\sum_{i=0}^nC_x^i g_ifx=i=0∑nCxigi
gx=∑i=0x(−1)x−iCxifig_x=\sum_{i=0}^x(-1)^{x-i}C_{x}^if_igx=i=0∑x(−1)x−iCxifi
证法类似。
min-max 容斥
感觉换汤不换药。
给出式子:
max(S)=∑T⊂S(−1)∣T∣min(T)\max(S)=\sum_{T\sub S}(-1)^{|T|}\min(T)max(S)=T⊂S∑(−1)∣T∣min(T)
min(S)=∑T⊂S(−1)∣T∣max(T)\min(S)=\sum_{T\sub S}(-1)^{|T|}\max(T)min(S)=T⊂S∑(−1)∣T∣max(T)
这里只给出第一个式子的证明,第二个式子的证明较为类似。
考虑最大值 max(S)\max(S)max(S),它成为最小值产生贡献当且近当 T={max(S)}T=\{\max(S)\}T={max(S)},显然只会产生一次正贡献。
而对于不是最大值的元素 x∈Sx\in Sx∈S,设比它大的元素的个数为 kkk,那么它成为最小值产生贡献当且近当 TTT 为前 kkk 个元素的某个子集并上 {x}\{x\}{x},那么它的系数就是:
∑i=0x(xi)(−1)i\sum_{i=0}^x\binom{x}{i}(-1)^ii=0∑x(ix)(−1)i
二项式反演一下:
∑i=0x(xi)(−1)i=∑i=0x(xi)(−1)i(1)x−i=(1−1)x=0\sum_{i=0}^x\binom{x}{i}(-1)^i=\sum_{i=0}^x\binom{x}{i}(-1)^i(1)^{x-i}=(1-1)^{x}=0i=0∑x(ix)(−1)i=i=0∑x(ix)(−1)i(1)x−i=(1−1)x=0
所以所有不是最大值的元素的贡献都是0。
那么最后西格玛的结果就是 max(S)\max(S)max(S)。
注意:这个式子当最小值不唯一的时候依然成立,min(T)\min(T)min(T) 的含义就变为了所有并列最小值的和。但是所求的最大值必须唯一!