容斥原理

容斥原理基本公式

对于一个集合 S 的一部分子集构成的簇 P 有:

\[|\mathop{\bigcup}\limits_{T\in P}T| =\sum\limits_{Q\subset P}(−1)^{|Q|−1}|\mathop{\bigcap}\limits_{T\in Q}T| \]

证明:

考虑每个元素 \(x\),假设它被 \(k\) 个元素包含,那么它的贡献就是 \(\sum\limits_{i=1}^k(-1)^{i-1}\binom{k}{i}\)

\(k=0\),显然该式等于 0。

\(k>0\),则:

\(\begin{aligned}\sum\limits_{i=1}^k(-1)^{i-1}\binom{k}{i}&=\sum\limits_{i=0}^k(-1)^{i-1}\binom{k}{i}+1\\&=-\sum\limits_{i=0}^k(-1)^i\binom{k}{i}+1\\&=-(1-1)^k+1=1\end{aligned}\)

\(x\) 的贡献为 \([k>0]\),可得原式。

\(\min-\max\) 容斥

\[\max(S)=\sum\limits_{T\subseteq S}(-1)^{|T|+1}\min(T) \]

\[\max\limits_{kth}(S)=\sum\limits_{T\subseteq S}(-1)^{|T|-k}\binom{|T|-1}{k-1}\min(T) \]

证明:

\(\begin{aligned}\max\limits_{k_{th}}{S}&=\sum\limits_{T\subseteq S}{(-1)^{|T|-k}\dbinom {|T|-1}{k-1}\min T}\\&=\sum\limits_{x\in S}x\sum\limits_{x\in T\subseteq S}{(-1)^{|T|-k}\dbinom {|T|-1}{k-1}[\min{T}=x]}\end{aligned}\)

\(f(x)\) 表示 \(S\) 中大于 \(x\) 的元素构成的集合,则原式:

\(\begin{aligned}=\sum\limits_{x\in S}{x}\sum\limits_{x\in T\subseteq f(x)}{(-1)^{|T|-k}\dbinom{|T|-1}{k-1}}\end{aligned}\)

枚举 \(|T|\),原式:

\(\begin{aligned}&=\sum\limits_{x\in S}{x\sum\limits_{l=1}^{|f(x)|}{(-1)^{l-k}\dbinom{|f(x)|-1}{l-1}\dbinom{l-1}{k-1}}}\\&=\sum\limits_{x\in S}{x\sum\limits_{l=1}^{|f(x)|}{(-1)^{l-k}\dbinom {|f(x)|-1}{k-1}\dbinom{|f(x)|-k}{l-k}}}\\&=\sum\limits_{x\in S}{x\dbinom {|f(x)|-1}{k-1}\sum\limits_{l=1} ^{|f(x)|}{(-1)^{l-k}\dbinom {|f(x)|-k}{l-k}}}\end{aligned}\)

易知 \(|f(x)|<k\) 时无贡献。

\(\begin{aligned}&=\sum\limits_{x\in S}{x\dbinom {|f(x)|-1}{k-1}\sum\limits_{l=0}^{|f(x)|-k}(-1)^l\dbinom{|f(x)|-k}{l}}\\&=\sum\limits_{x\in S}{x\dbinom {|f(x)|-1}{k-1}[|f(x)|=k]}=\max\limits_{k_{th}}{S}\end{aligned}\)

容斥原理例题

  1. 硬币购物

共有 4 种硬币。面值分别为 \(c_1,c_2,c_3,c_4\)

某人去商店买东西,去了 \(n\) 次,对于每次购买,他带了 \(d_i\)\(i\) 种硬币,想购买 \(s\) 的价值的东西。请问每次有多少种付款方法。

sol:

\(A_1,A_2,A_3,A_4\) 分别为每种硬币取超限的方案数。

则答案为总情况数减去 \(A_1\cup A_2\cup A_3\cup A_4\)

显然,总情况数做一个完全背包即可求出。

现在考虑第 1 种硬币超限的方案数,它其实相当于先取 \(d_1+1\) 个第 1 种硬币,再对剩下的硬币做一次完全背包。

同理,可以用以上方法算出所有方案数,此题得解。

  1. 卡农

在集合 \(S=\{1,2,\cdots,n\}\) 中,选出 \(m\) 个无序的互不相同的非空子集,使得每个元素的出现次数均为偶数,求选择方案数。

sol:

\(f_i\) 表示选出 \(i\) 个集合满足条件的方案数。

先考虑出现次数为偶数的限制:前 \(i-1\) 个集合确定了,第 \(i\) 个集合也确定了,方案数为 \((2^n-1)^{\underline{i-1}}\)

再减去不满足另外两个限制的方案数:

  • \(i\) 个集合为空集。此时前 \(i-1\) 个集合构成合法方案,数量为 \(f_{i-1}\)

  • \(i\) 个集合和第 \(j\) 个集合相同。此时剩下 \(i-2\) 个集合构成合法方案,且 \(j\)\(i-1\) 种选法,集合 \(i\)\(2^n-1-(i-2)\) 种选法。故数量为 \(f_{i-2}(i-1)(2^n-i+1)\)

综上,递推式为 \(f_i=(2^n-1)^{\underline{i-1}}-f_{i-1}-f_{i-2}(i-1)(2^n-i+1)\)

  1. 如何正确地排序

给定数列 \(a,b,c\),求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^n\max\{a_i+a_j,b_i+b_j,c_i+c_j\}-\min\{a_i+a_j,b_i+b_j,c_i+c_j\}\)

sol:

考虑 min-max 容斥。

\(\begin{aligned}\max\{a_i+a_j,b_i+b_j,c_i+c_j\}-\min\{a_i+a_j,b_i+b_j,c_i+c_j\}\end{aligned}\)

\(\begin{aligned}=a_i+a_j+b_i+b_j+c_i+c_j-\min\{a_i+a_j,b_i+b_j\}-\min\{a_i+a_j,c_i+c_j\}-\min\{b_i+b_j,c_i+c_j\}\end{aligned}\)

考虑如何求出 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^n-\min\{a_i+a_j,b_i+b_j\}\)

把式子变成 \((a_i+a_j)[a_i+a_j<b_i+b_j]\),移一下项可得:\((a_i+a_j)[a_i-b_i<b_j-a_j]\),发现就是一个逆序对,树状数组或二维偏序即可。

  1. Card Collector

\(n\) 个元素,每次随机选择一个,有 \(p_i\) 的概率选择第 \(i\) 个,问所有元素都被选择的期望时间。

sol1:

假设全集为 \(S\),则答案为 \(E(\max(S))\)

考虑 min-max 容斥:

\[E(\max(S))=\sum\limits_{T\subseteq S}(-1)^{|T|+1}E(\min(T)) \]

\(E(\min(T))\) 第一次抽出集合 \(T\) 中元素的期望时间,显然是 \(\frac{1}{\sum\limits_{i\in S}p_i}\)。(概率是 \(\sum\limits_{i\in S}p_i\),则期望是它的倒数,可证明)

sol2:

\(f_S\) 表示现在已经有了集合 \(S\) 中的元素,集齐全部的时间期望。

\(f_{S}=1+(\sum\limits_{i\in S}p_i)f_{S}+(\sum\limits_{i\notin S}p_i)f_{S+\{i\}}\)

化简得 \(f_{S}=\frac{1+(\sum\limits_{i\notin S}p_i)f_{S+\{i\}}}{1-\sum\limits_{i\in S}p_i}\)\(\operatorname{dp}\) 即可。

  1. 重返现世

\(n\) 个元素,每次随机选择一个,有 \(\frac{p_i}{m}\) 的概率选择第 \(i\) 个,问第一次有 \(k\) 个元素被选择的期望时间。

sol:

设全集为 \(S\),显然答案为 \(E(\max\limits_{kth}(S))\)

由 min-max 容斥:

\(\begin{aligned}E(\max\limits_{kth}(S))&=\sum\limits_{T\subset S}(-1)^{|T|-k}\binom{|T|-1}{k-1}E(\min(S))\\&=\sum\limits_{T\subset S}(-1)^{|T|-k}\binom{|T|-1}{k-1}\frac{m}{\sum\limits_{i\in T}p_i}\end{aligned}\)

转为枚举 \(\frac{m}{\sum\limits_{i\in T}p_i}\),则答案为:

\[\sum\limits_{h=0}^m\frac{m}{h}\cdot \sum\limits_{T\subset S\land \sum\limits_{i\in T}p_i=h}(-1)^{|T|-k}\binom{|T|-1}{k-1} \]

\(\frac{m}{h}\) 后面一部分为 \(f_{n,h}\),则答案为 \(\sum\limits_{h=0}^m\frac{m}{h}\cdot f_{n,h}\)

考虑转移,有两种情况:

不选 \(n\),则贡献为 \(f_{n-1,h}\)

\(n\),对于 \(i,j\) 这两维,必定分别由 \(i-1,j-p_i\) 转移而来,但如果直接转移,转移后的所有 \(|T|\) 都比转移前大 \(1\)(塞了个 \(p_i\) 进去),考虑其影响:

  1. 式子里的 \((-1)^{|T|-k}\) 正负相反,所以应该给转移的 \(f\) 取相反数。

  2. 观察 \(C_{|T|-1}^{k-1}\),如果 \(|T|\) 大 1,它可以拆成 \(C_{|T|-1}^{k-1} + C_{|T|-1}^{k-2}\)

    • \(C_{|T|-1}^{k-1}\)\(k\) 不变,由于 \(|T|\) 变了 1,所以 \(f_{k,i-1,j-p_i}\)\(f_{k,i,j}\)\(-f_{k,i-1,j-p_i}\) 的贡献。

    • \(C_{|T|-1}^{k-2}\)\(k\)\(1\)\(|T|\) 也变了 \(1\),负负得正,\(f_{k-1,i-1,j-p_i}\)\(f_{k-1,i,j}\)\(f_{k-1,i-1,j-p_i}\) 的贡献。

把它们综合起来,可得 \(f_{i,j,k}=f_{i-1,j,k}-f_{i-1,j-p_i,k}+f_{i-1,j-p_i,k-1}\)

\(O(nmk)\) 算出 \(f\) 数组,答案就能求了。

posted @ 2025-01-31 15:52  O_v_O  阅读(152)  评论(1)    收藏  举报