其他分享
首页 > 其他分享> > 【DP 记录】AcWing 734. 能量石

【DP 记录】AcWing 734. 能量石

作者:互联网

传送门

给你几个物品,每种选一次,求最大价值,首先想到 01 背包,但是我们遇到了一个问题:

普通的 01 背包在选择物品时是不讲求顺序的,但在这道题中,物品的选择是有顺序的(即对最优解贡献有顺序),显然 \(O(n!)\) 枚举排列不可取,那我们能否提前确定好顺序,再来做背包呢?

$\bullet\ $ 考虑从贪心解入手

对于贪心解,我们得到一组排列 \(a_1,a_2,\ldots,a_n\) ,其中任选相邻的一对 \(i\) 和 \(j\),我们将其交换位置,所得的新的解一定不增(否则就贪心地选这个顺序了),即它们的总贡献(注:能交换邻项的条件是改变它们顺序不影响其他项的结果

\[E_i+E_j-S_i\times L_j \geq E_i+E_j-S_j\times L_i \]

消掉一些项,将有关 \(i\) 的移到左边,得

\[\frac{S_i}{L_i} \leq \frac{S_j}{L_j} \]

即我们可以按照这样排序,得到最优的顺序来背包。

$\bullet\ $ 如何证明贪心解即为最优解?

对于最优解的排列方式,我们可以将满足 \(\frac{S_i}{L_i} > \frac{S_j}{L_j}\) 的相邻两项交换,其解一定不降,所以 贪心解 ≥ 最优解。又因为,贪心解一定是合法解,所以 贪心解 ≤ 最优解,故 贪心解 = 最优解

new trick: 邻项交换法!

提交记录

标签:顺序,frac,01,背包,734,最优,AcWing,DP,贪心
来源: https://www.cnblogs.com/RuntimeErr/p/16599959.html