多重背包的贪心近似定理
ReLU
·
·
算法·理论
1. 问题描述
考虑标准的多重背包问题。有 n 种物品,第 i 种物品有 c_i 个,每个物品体积 t_i,价值 w_i,背包容量为 m。其中 n,c_i,t_i,w_i,m 均为正整数。
一个解记为长 n 的非负整数序列 s=\{s_1,s_2,\dots,s_n\},其中 s_i 表示取了 s_i 个第 i 种物品,满足 0\le s_i\le c_i 且 \sum_is_it_i\le m。
定义解 s 的总体积和总价值分别为
T(s)=\sum_i s_i t_i
\qquad
W(s)=\sum_i s_i w_i
记第 i 种物品的性价比为 r_i=w_i/t_i。
记 t_{\max}=\max_i t_i。
设所有最优解组成的集合为 O=\{s|s~\text{是一个最优解}\}。
现在按性价比 r_i 从高到低排序,尽可能多地装入物品,得到贪心解 g。
2. 贪心近似定理
我们要证明如下结论:
\boxed{
\exists x\in O,
\forall i,\ |g_i-x_i|\le t_{\max}
}
也就是说,一定存在一个最优解,它每一种物品取的数量都不会与贪心解相差超过 t_{\max}。
3. 证明
3.1. 准备
如果所有物品都可以全部装入背包,贪心解就是唯一最优解,定理显然成立。
因此下面统一假设 \sum_{i=1}^n c_i t_i>m,于是任何可行解都不会取完所有物品。这个性质将在后面使用。
记
H(s)=\sum_i|g_i-s_i|
固定 x 为所有最优解中 H 最小的。我们将证明 x 满足 \forall i,|g_i-x_i|\le t_{\max}。
3.2. 贪心解的结构
不妨重新编号,使得 r_1\ge r_2\ge\cdots\ge r_n。按照这个顺序贪心。
由于物品无法全部装下,由贪心过程可知存在唯一的 k,使得
\begin{aligned}
&\forall i<k, g_i=c_i\\
&0\le g_k<c_k\\
&\forall i>k, g_i=0 \\
\end{aligned}
即:
- 性价比高于第 k 中物品的全取完
- 第 k 种物品取了一部分
- 第 k 种之后的物品不取
3.3. 引理一
$$
m-T(s)<t_{\max}
$$
证明:反设 $\exists s\in O$ 满足 $m-T(s)\ge t_{\max}$,即剩余容量至少还能装一个物品。由于物品不能全部取完,加入一个没取的物品能得到严格更优的解,矛盾。
### 3.4. 引理二
$\forall s\in O$,有
$$
-t_{\max}<T(s)-T(g)<t_{\max}
$$
证明:显然 $g$ 满足 $m-T(g)<t_{\max}$。由引理一得 $m-T(s)<t_{\max}$。结合两式即可证明。
### 3.5. 反证法证明
反设存在 $a$,使得 $|g_a-x_a|>t_{\max}$。分类讨论拆绝对值。
#### 情况一:$\exists a,g_a-x_a>t_{\max}
定义
\begin{aligned}
& \Delta_{-} = \sum_{x_i<g_i}t_i(x_i-g_i) \le t_a(x_a-g_a) < -t_at_{\max} \\
& \Delta_{+} = \sum_{x_i>g_i}t_i(x_i-g_i) \le \sum_{x_i>g_i}t_{\max}(x_i-g_i)
\end{aligned}
有
T(x)-T(g)=\Delta_{-}+\Delta_{+}
由引理二得
\begin{aligned}
-t_{\max}&<T(x)-T(g) \\
-t_{\max}&< \Delta_{-} + \Delta_{+} \\
-t_{\max}&< \sum_{x_i<g_i}t_i(x_i-g_i) + \sum_{x_i>g_i}t_i(x_i-g_i) \\
-t_{\max}&< -t_at_{\max} + \sum_{x_i>g_i}t_{\max}(x_i-g_i) \\
-1&< -t_a + \sum_{x_i>g_i}(x_i-g_i) \\
t_a-1&<\sum_{x_i>g_i}(x_i-g_i) \\
t_a&\le\sum_{x_i>g_i}(x_i-g_i)
\end{aligned}
即 x 相较于 g 至少多取了 t_a 个物品。根据贪心结构,所有满足 x_i>g_i 的物品都排在 a 的后面,因此它们的性价比都满足 r_i\le r_a。
于是,在这些多取的物品中,由抽屉原理,可以选出一个非空子集 S,使得
\sum_{i\in S}t_i\equiv0\pmod{t_a}
(不妨考虑前缀和)
设
\sum_{i\in S}t_i=q t_a
由于 x_a<g_a,我们可以拿 S 中的物品换 q 个物品 a,从而
这与 x 是所有最优解中 H 最小者矛盾。
情况二:\exists a,x_a-g_a>t_{\max}
这与情况一完全对称。
同理
\begin{aligned}
& \Delta_{-}=\sum_{x_i<g_i}t_i(x_i-g_i) \ge \sum_{x_i<g_i}t_{\max}(x_i-g_i) \\
& \Delta_{+}=\sum_{x_i>g_i}t_i(x_i-g_i) \ge t_a(x_a-g_a)>t_at_{\max}
\end{aligned}
由引理二得
\begin{aligned}
T(x)-T(g) &< t_{\max} \\
\Delta_{-}+\Delta_{+} &< t_{\max} \\
\sum_{x_i<g_i}t_i(x_i-g_i) + \sum_{x_i>g_i}t_i(x_i-g_i) &< t_{\max} \\
\sum_{x_i<g_i}t_{\max}(x_i-g_i) + t_at_{\max} &< t_{\max} \\
\sum_{x_i<g_i}(x_i-g_i) + t_a &< 1 \\
\sum_{x_i<g_i}(x_i-g_i) &< 1-t_a \\
\sum_{x_i<g_i}(x_i-g_i) &\le -t_a \\
\sum_{x_i<g_i}(g_i-x_i) &\ge t_a \\
\end{aligned}
即至少少选 t_a 个物品,少选的物品必排在 a 前面。后面的论证同理。
证毕。
4. 应用
在上面的多重背包问题中,我们令数据范围 n,t_i\le 100,m,c_i,w_i\le 10^9。
首先不难求出 g。由贪心近似定理,对于每一种物品 i,可以限制最优解 x_i 的范围:
x_i\in
\left[
\max(0,g_i-t_{\max}),
\min(g_i+t_{\max},c_i)
\right]
因此每一种物品剩余的可变数量只有 \Theta(t_{\max}) 个。
由于 t_{\max}\le 100,只需要在这个小范围内做多重背包 DP 即可。