min-max容斥

· · 个人记录

min_max容斥无疑为 \min\max 搭建了一座桥梁。

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

证明:对于 S 中元素 x,若其是第 k 大,则其被算了

这里的 $sz$ 指的是除了元素 $x$ 以外,集合 $T$ 内其他的元素个数 而它又等于 $(1-1)^{k-1}=[k-1=0]=[k=1]

也就是说除了最大的算一次,其他的都只算了 0

有如下推论。

\operatorname{lcm}(S)=\prod\limits_{T\subseteq S} \gcd(T)^{(-1)^{|T|-1}}

ARC202_C

首先列出通项

lcm(L_{a_1},L_{a_2},\cdots,L_{a_k})=\prod_{S\subseteq2^k} \gcd(L_S)^{(-1)^{|S|+1}}=\prod_{S\subseteq2^k} L_{\gcd(S)}^{(-1)^{|S|+1}}

那么 L_d 头顶上的指数应该是 \sum\limits_{\gcd(S)=d}(-1)^{|S|+1},记其为 f(d)

然后看到 \gcd(S)=d 的条件应当立即想到做如下变换

g(d)=\sum\limits_{d|gcd(S)}(-1)^{|S|+1}

这样变换的好处是把一个和 S 里数字运算得出的值有关的量,变成了只和数字本身有关的量。

则有 f(d)=\sum\limits_{d|n} \mu(\frac{n}{d})g(n)

考察 g(d),如果有 x 个数字被 d 整除,那么 g(d)=\sum\limits_{i=1}^x(-1)^{x+1}\dbinom{x}{i}

最后得到 g(x)=\begin{cases}1&x\geq1\\0&x=0\end{cases}

这样我们的解法就变得很明朗了。

首先 n\log n 把所有数的约数给处理好 (\frac{1}{1}+\frac{1}{2}+\cdots+\frac{1}{n}\leq \log n)

加入 a_i ,如果之前没有出现过 a_i,那么在约数表里扫描。把对应的 g(d) 改成 1。然后再枚举 d 的约数,修改 f,修改 f 时对应修改 ans

总结与启发:在高维取 \min 和取 \max 要可以从反方向想,使用 min_max 定理。碰到 \gcd(S) 要记得使用反演变成 d|\gcd(S) 的形式,这样方便处理。

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

不是很清楚怎么证……可能就是用期望的定义式吧

来看一道题目

给定 n*m的棋盘,每个格子上有 0 ~ 9 的数字。每个回合以的概率选中格子 (i,j) 并涂成黑色,可能重复涂色。若每行每列都至少有一个黑色格子则游戏结束。求结束的期望时间。

令集合 S 为所有行和列被第一次覆盖到的时间的集合。那么其子集 T 则代表了一部分行和列第一次被覆盖到的时间集合。

我们要求的应当是 E(\max(S)),于是发动某武功秘籍。

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

E(\min(T))

E(\min(T))=\sum\limits_{i=1} p(i)*i=\sum\limits_{i=1} p(step\geq i)=\sum\limits_{i=1}(1-p)^i=\frac{1}{p}=\frac{\sum\limits_{i=1}^n\sum\limits_{j=1}^m P_{i,j}}{\sum\limits_{(i,j)∈T}P_{i,j}}

这个 p 就是选到集合 T 里格子的概率。

我们发现 \sum\limits_{(i,j)∈T}P_{i,j} 是个较小的数字。并且它对应增加到答案的系数也只有 ±1 两种可能。

由于 nm\leq 150,所以 \max(n,m)\leq 12,不妨设 n\leq m

于是我们枚举行的子集。然后对于列,我们设计状态 f_{i,sum,coe} 代表前 i 列,概率总和为 sum,最终加到答案里系数为 coe 的方案总数。

时间复杂度:2^n*m*9nm=O(2^nnm^2)

还有一道题目 P3175 [HAOI2015] 按位或

对于这种期望题,我们的集合 S 不需要考虑期望意义,也就是说,只需要注意在一次的时候重要的东西(如怎么判定结束,怎么弄出 \min/\max 意义)在于什么即可。

我们令集合 S 为每一位被赋予 1 的时间集合。

同样有

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

然后就差不多了。

然后介绍一种类似于 ex min-max 的容斥

kthmax(S)=\sum\limits_{T\subseteq S} f(|T|-1)\min(T)

这里用了 f(|T|-1) 是想把要算的第 k 大的那个数排开来,这样的话,f 会更方便被表示

而我们该如何计算 f(|T|-1) 呢?

面对问题,我们要学会举一反三,方能一通百通

对于第 x 大的数字,它会被计算 g(x)=\sum\limits_{i=0}^{x-1} \dbinom{x-1}{i}f(i)

也就有 g(x+1)=\sum\limits_{i=0}^{x} \dbinom{x}{i}f(i)

而我们希望 g(x)=[x=k]

h(x)=g(x+1)=[x=k-1]

根据反演公式,我们有 f(x)=\sum\limits_{i=0}^{x}\dbinom{x}{i}(-1)^{x-i}h(i)=\sum\limits_{i=0}^{x}\dbinom{x}{i}(-1)^{x-i}g(i+1)=\dbinom{x}{k-1}(-1)^{x-k+1}

那么,我们有 kthmax(S)=\sum\limits_{T\subseteq S} \dbinom{|T|-1}{k-1}(-1)^{|T|-k}\min(T)

这个式子对于期望同样成立!