Lijinrui299792458

不做沉底的木做举重若轻的船。

算法感性理解

本文主要是对于一些算法的更为直观或感性的理解,持续更新。

Min-Max 容斥

容斥

何为容斥?容斥处理集合的交或并。自然,这可以是多个条件的与或或。

Min 与 Max 的分解

Min 和 Max 属于比较严格的限制了(严格到只有一个啊)。那么我们就分解他。

先看看 Min。Min 意味着这个数 $\le$ 所有的数。然而这样限制出来,得到的是所有 $\le$ Min 的数。不过这样形式倒是统一。

那么我们令 $f(x)$ 为 $\le x$ 的数的集合。为了方便,所有数都是正数,这样 $f^{-1}(V)=\left|V\right|$。

那么:
$$
\max(S)=\left|\bigcup_{x\in S} f(x)\right|=\sum_{T\subseteq S}\left((-1)^{\left|T\right|+1}
\left|\bigcap_{x\in T}f(x)\right|\right)=\sum_{T\subseteq S}(-1)^{\left|T\right|+1}\min(T)
$$
Min 同样。

WQS 二分

问题:一堆物品,每个有价值。取 k 个,有限制,求最大价值。

如果 f[i][j] 表示状态 DP,到 i 位,已经取 j 个,状态都两维大概也没法更优。

另一种思路是贪心。如果限制性质比较好可以给贪心加个反悔,比如P1484 种树

DP 如果要优化必须降维。你不能把 DP 到哪这维去了,那就只能去已经取多少个。那就不能考虑个数限制了,只能在 DP 之外来体现。

要是求完正好 k 个那可太好了,要是不是?

我怎么影响最优解的选的个数呢?我要是给选的个数一个附加的代价,这个代价大个数少,代价小个数多。

那么给每一个物品的价值加个常数 c,二分他,直到你正好选了 k 个。

学习资料

Train2012-sol-wqs.pdf 其实 wqs 本人论文里说得虽然简洁但是挺明白的。