一种贪心问题的构造方案及证明技巧

反证法证明贪心策略的可行性

当我们考虑证明某个贪心策略最优时,往往采用反证法:假设另一个与贪心算法不同的算法,我们考虑将其中不同的某一部分转化成贪心算法的部分,然后尝试证明这个新方法一定不劣.

比如证明以下问题的贪心策略:


现有 \(n\) 个宝物,其重量分别为 \(a_i\),宝物可以随意分割,每种宝物每一单位的价值为 \(v_i\),给定最多拿取重量 \(M\),问能取得的最大价值是多少?


这个问题的贪心策略是:优先拿价值最高的物品.

考虑证明这个贪心策略:
假设存在另一方案,它没有优先拿价值最高的物品,具体的说,即其拿取了第 \(j\) 个物品,而未拿取第 \(i\) 个物品,且 \(v_{i}>v_{j}\)
则显然,我们把第 \(j\) 个物品拿出来,换成贪心策略,拿取第 \(i\) 个物品,则拿取价值一定不会更低(事实上,这里必然会更高)

这个也可以很直观地得出证明.

通过更优性比较得到贪心策略

但是有时我们并不能知道贪心策略后再证明,很多时候我们需要构造贪心策略,于是我们可以借助不等式来得到何种策略最优.

考虑以下问题的贪心策略:


需要完成 \(n\) 个魔法任务。假设你当前的时间为 \(T\),每个任务需要有一定的限制 \(t_i\)​ 表示只有当你的 \(T\) 严格大于 \(t_i\)​ 时你才能完成这个任务,完成任务并不需要消耗时间。当你完成第 \(i\) 个任务时,你的时间 \(T\) 会加上 \(b_i\)​,此时要保证 \(T\) 在任何时刻都大于 \(0\),那么请问你是否能完成这 \(n\) 个魔法任务?
注意:\(b_i\) 有可能为负.


我们首先可以直观地了解到一个简单的结论:先处理 \(b_{i}> 0\) 的任务一定是不劣的,因为这样子 \(T\) 会递增而非递减.
因此我们分两部分考虑:
先考虑 \(b_{i}\geq 0\) 的部分,这部分结论很显然:按时间限制 \(t_{i}\) 从小到大排序,依次完成任务即可.

然后考虑 \(b_{i}<0\) 的部分:这部分贪心策略不太显然,我们需要利用贪心性质的 不劣性 来构造不等式:
考虑两个任务 \(i,j\),他们满足 \(b_{i},b_{j}<0,~i<j\),我们假设先处理 \(i\)不劣的(因为这里假设了 \(i<j\),所以是先处理 \(i\) 不劣),那么根据这个 不劣 的条件,我们可以得到下面的不等式:

\[\left\{\begin{matrix} T+b_{i}\geq t_{j} \\ T+b_{j}\leq t_{i} \end{matrix}\right.\]

即:先完成 \(i\),应该能有机会完成 \(j\),但是先完成 \(j\),一定无机会完成 \(i\).
从而可以得到:\(t_{j}-b_{i}\leq T\leq t_{i}-b_{j}\)
移项得到:\(t_{i}+b_{i}\geq t_{j}+b_{j}\)
所以我们得到了先处理 \(i\) 更优的条件:满足 \(t_{i}+b_{i}\geq t_{j}+b_{j}\),这也就是贪心的策略:按 \(t+b\) 从大到小排序.

再来看下面这个问题:


给定 \(n\) 棵摇钱树,每一棵树起初分别有 \(m_1,m_2,\dots,m_n\) 个金币,每天每棵树会分别减少 \(b_1,b_2,\dots,b_n\) 个金币,现在有 \(k\) 天时间,每天只能砍掉一棵树并获得其树上的所有金币,问最多获得的金币数是多少?
注意:金币数不会减为负数,减为 \(0\) 后便不会再减少.


首先我们能知道这个显然不是简单的贪心,观察一下像是 dp 的形式,但是我们又没有确定好 dp 的顺序(一般我们钦定 dp 是顺序处理的),所以我们可以考虑用贪心的思想来大概确定 dp 的顺序.

又是如上的技巧:我们不妨假设 \(i<j\) 且只考虑这两个,则:
(1)先处理 \(i\),后处理 \(j\) 的贡献是:\(m_{i}+m_{j}-b_{j}\)
(2)先处理 \(j\),后处理 \(i\) 的贡献是:\(m_{j}+m_{i}-b_{i}\)
因为钦定了 \(i<j\),所以(1)的贡献应该 \(\geq\) (2)的贡献,即:\(b_{i}\geq b_{j}\)
从而我们得到了贪心顺序:按 \(b_{i}\) 从大到小排序.

另外再给出 \(dp\) 方程:\(dp[i][j]=\max\{dp[i-1][j],dp[i-1][j-1]+m[i]-b[i]*(j-1))\}\)
其中,\(dp[i][j]\) 表示考虑前 \(i\) 棵树,选择其中的 \(j\) 棵能获得的最多金币数.

posted @ 2026-01-14 01:52  Nicly  阅读(2)  评论(0)    收藏  举报