Sol P1417 烹调方案
和国王游戏的一部分内容有点像呢。
首先考虑 01 背包,设 \(f_j\) 为时间为 \(j\) 时的最大价值。
我么可以把 \(c_i\) 看做重量,\(a_i-b_i\times t\) 看做价值;
转移方程:\(f_j = \max \{f_j ,f_{j-c_i}+a_i-j*b_i\}\)。
此时我们发现只能过水的样例。
考虑到随着时间的推移,价值会减少。
所以我们需要先选更有价值的物品。
普通 01 背包不用重排是因为价值总是固定,但是现在价值在变化。
于是用到和国王游戏类似的贪心方法,设现在时间为 \(pret\):
-
先做 \(i\),再做 \(j\),收货价值为 \(a_i - (pret+b_i)\times c_i + a_j - (pret+b_i+b_j)\times c_j = a_i - pret\times c_i - b_i\times c_i + a_j - pret\times c_j-b_i\times c_j-b_j\times c_j\);
-
先做 \(i\),再做 \(j\),收货价值为 \(a_i - (pret+b_i+b_j)\times c_i + a_j - (pret+b_j)\times c_j = a_i - pret\times c_i - b_i\times c_i - b_j\times c_i + a_j - pret\times c_j-b_j\times c_j\);
钦定 \(i<j\),我们想要先做 \(i\) 再做 \(j\) 的价值高,就必须满足 \((a_i - pret\times c_i - b_i\times c_i + a_j - pret\times c_j-b_i\times c_j-b_j\times c_j) > (a_i - pret\times c_i - b_i\times c_i - b_j\times c_i + a_j - pret\times c_j-b_j\times c_j)\),化简得 \(-b_i\times c_j > - b_j\times c_i\),即 \(b_i\times c_j < b_j\times c_i\)。
排完序再背包就可以了,注意不能直接循环做,理由和 01 背包板子时不使用贪心而使用 01 背包类似。
代码不放了。
本文来自博客园,作者:2021zjhs005,转载请注明原文链接:https://www.cnblogs.com/2021zjhs005/p/18957647

浙公网安备 33010602011771号