容斥与反演技巧(三)
Min-Max 容斥
简单来说,由于 \(\mathbb E[\max(x,y)]\neq \max(\mathbb E[x],\mathbb E[y])\),而如果计算 \(\mathbb E[\min(x,y)]\) 比计算 \(\mathbb E[\max(x,y)]\) 容易得多,我们就通常使用 min-max 容斥转为计算 \(\mathbb E[\min(x,y)]\)。
对于上面这种 \(x,y\) 的情况,实际上只需要注意到 \(\max(x,y)=x+y-\min(x,y)\),就有
上面这一步只利用了期望的线性性,因此是正确的。对于多元的情况,我们有
这个式子怎么来的呢,其实就是利用二项式反演 \([n=0]=\sum_{i=0}^n(-1)^i\binom{n}{i}\)(或者说是 \([S=\varnothing]=\sum_{T\subseteq S}(-1)^{|T|}\)),考虑将 \(S\) 中元素从大到小排列后第 \(i\) 个元素的系数,发现他就是
因此自然有 \(\max(S)=\sum_{T\neq \varnothing,T\subseteq S}(-1)^{|T|+1}\min(T)\)。换成 \(\min\) 也同理。
如果要算第 \(k\) 大即 \(\max_k(S)\),只需注意到
然后想一下我们应该怎么构造这个式子。显然 \(T\) 那边应该给一个系数 \((-1)^{|T|-k+2}=(-1)^{|T|+k}\),但是如果直接算的话系数会变成 \(\binom{n}{i}\) 而非 \(\binom{n-k+1}{i-k+1}\),因此我们需要乘上一个
你发现由于 \(n>k-1\) 的时候这东西都是 \(0\) 所以分母没有意义;\(n=k-1\) 的时候分母是 \(1\) 也没有意义,因此不妨直接去掉分母,就有
对于 \(\min_k\) 也一样。注意到 \(|T|<k\) 时 \(\binom{|T|-1}{|T|-k}\) 就是 \(0\),因此求和条件中的 \(|T|\ge k\) 可以去掉。只不过此时需要认为 \(\min(\varnothing)=0\),或者限定 \(T\neq\varnothing\)。
HDU4336
显然可以状压 DP 做到 \(O(n2^n)\)。
考虑 min-max 容斥:\(t_i\) 表示 \(i\) 第一次出现的时间(这是一个随机变量),则所求即为
注意到 \(\mathbb E[\min_{x\in T}t_x]\) 可以看作每秒有 \(\sum_{x\in T}p_x\) 的概率命中,问首次命中的期望时间。
显然,这就是 \(\frac{1}{\sum_{x\in T}p_x}\)。因此答案就是
可以做到 \(O(2^n)\)。貌似并没有很大提升orz
LOJ2127
设 \(t_i\) 表示期望意义下第一次 \(i\in S\) 的时间,考虑怎么算 \(E[\min_{x\in T}t_x]\)。
发现这就是 \(\dfrac{1}{\sum_{T\cap C\neq \varnothing}p[C]}\),FWT 预处理高维前缀和即可。时间复杂度 \(O(n2^n)\)。
Luogu4707
设 \(t_i\) 为收集到 \(i\) 的期望时间,所求即 \(E[\min_k\{t_i|i=1,2,\cdots,n\}]\)。
注意到 \(n-k\le 10\),我们不妨取新的 \(k\leftarrow n-k+1\),然后求 kthmax 的期望,且 \(1\le k\le 11\)。
套用 minmax 容斥的式子:
考虑 \(\mathbb E[\text{min}(T)]\),发现他就是 \(\frac{m}{\sum_{x\in T}p_x}\)。因此上式即
注意到 \(\sum p_x=m\le 10^4\),考虑枚举 \(\sum p_i\)。记 \(\text{sum}(T)=\sum_{x\in T}p_x\)
现在只需要算出后面那一项。发现这只和 \(|T|\) 有关,并且带了一个下降幂,考虑设计
考虑转移,如果选了当前的 \(p_i\),当 \(k>1\) 时,原来的 \(\binom{|T|-1}{k-1}(-1)^{|T|+k}\) 会变为
而当 \(k=1\) 时,相当于只添了一个负号,因此有
边界条件应当为 \(f(0,0,k)=\binom{-1}{k-1}(-1)^{0+k}=-1\)。答案即为 \(\sum \frac{m}{j}f(n,j,k)\)。
时间复杂度 \(O(nmk)\)。
ABC242Ex
设 \(t_i\) 表示 \(i\) 第一次被染色的时间,则答案为 \(E[\max\{t_i\}]\)。套路地进行 min-max 容斥,有
考虑怎么算 \(E[\min_{i\in T}t_i]\),发现如果能算出与 \(T\) 有交的区间 \([L_i,R_i]\) 个数 \(x\),那么相当于每次有 \(\frac{x}{m}\) 的概率命中,一旦命中就立即结束;因此有 \(E[\min(T)]=\frac{m}{x}\)。记这个 \(x\) 是 \(f(T)\)。
提前把 \([L_i,R_i]\) 二维前缀和一手,设 \(\text{dp}(i,j)\) 表示从前 \(i\) 个数中选子集,且必须选 \(i\),且 \(f(T)=j\) 的方案数,然后枚举上一个选的位置直接 DP 就是 \(O(n^2m)\) 的,可以通过。
ABC242F
做了这么多 minmax 容斥来道简单题换换心情
不难发现,只需要算出 \(f(i,j),g(i,j)\) 表示在 \(i\) 行 \(j\) 列中放黑白棋子使得每行每列至少一个的方案数。
答案就是
易知
预处理组合数即可。复杂度 \(O(N^2M^2)\)。模数可以不是质数的
LOJ2542
设 \(t_i\) 表示第一次走到 \(i\) 的时间,直接套 min-max 容斥,考虑咋算 \(\min(S)\)。
发现相当于删掉 \(S\) 以内的点,然后算第一次走出这个连通块的期望步数。
可以直接高斯消元然后 FMT 一手做到 \(O(n^32^n)\)。
考虑使用树上高消,\(f_u\) 表示从 \(u\) 开始走,第一次走出去期望要走多少步。那么有
其中 \(d_u\) 表示点 \(u\) 的度数,包括父亲。
我们考虑把 \(f_u\) 写成 \(A_u\times f_{\text{fa}(u)}+B_u\) 的形式,那么有
移项有
整理得
最后考虑根节点,有
再自顶向下根据 \(A,B\) 即可解的每个点的 \(f\) 值。总时间复杂度 \(O(n2^n\log P+Q)\)。
PKUSC2023 D1T2
有 \(n\) 个人在玩狼人杀,其中第 \(m\) 个是狼人。在剩下的 \(n-1\) 个人中等概率随机一个人作为预言家,预言家每次会随机选择一个区间 \([l,r]\)(即每个区间 \(\frac{2}{n(n+1)}\) 的概率),他可以知道狼人是否在这个区间内。问期望意义下预言家期望多少步能确定谁是狼人。
具体来说,如果预言家是 \(i\),那么对他而言的初始“候选狼人集合”为 \([1,i)\cup (i,n]\),如果他询问了 \([l,r]\),此时若狼人在 \([l,r]\) 内,则候选狼人集合由 \(S\leftarrow S\cap [l,r]\);否则 \(S\leftarrow S\cap([1,n]-[l,r])\)。该预言家找到狼人的期望步数就是 \(|S|\) 第一次变成 \(1\) 的期望步数。对某个质数取模。
数据范围:\(2\le n\le 150,1\le m\le n\)。
设 \(t_i\) 表示 \(i\) 第一次被排除的时间,其中 \(i\neq m\),那么就是要对每个 \(x\) 求 \(\mathbb E[\max_{i\neq x} t_i]\)。
考虑 \(\mathbb E[\min_{i\in S} t_i]\) 咋算,发现要使 \(S\) 中一个元素都不能被排除,需要有:
- 若区间包含了 \(m\),那么区间必须包含 \(S\) 中的所有数。
- 若区间没有包含 \(m\),那么区间必须不包含 \(S\) 中的任意数。
满足这个条件的区间个数如果是 \(x\),那么期望就是 \(\frac{C_{n}^2}{C_n^2-x}\)。
设 \(\min(S)=x,\max(S)=y\),那么第一种区间只需要满足 \(l\le \min(x,m),r\ge \max(y,m)\)。
考虑第二种区间怎么算,发现可以做个 DP 在 \(O(n^4)\) 内算出 \(f(i,j)\) 表示 \(i\) 个位置选子集,最后空出来 \(j\) 个区间的方案数。然后考虑 \(m\) 这个位置,发现只要转移的时候特殊处理一下即可。从每个位置开始做 DP 可以做到 \(O(n^5)\)。对于预言家的问题,只需要在状态中记录 \(0/1\) 即可。
然后考虑优化,发现可以不枚举开头,改为按 \(m\to n\to 1\to n-1\) 做 DP,经过 \(n\) 的时候特殊算区间个数。然后就不需要枚举开头了,复杂度 \(O(n^4)\)。