飘花效果

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 背包类似。

代码不放了。

posted @ 2025-06-30 13:52  2021zjhs005  阅读(12)  评论(0)    收藏  举报