单调队列优化多重背包
Posted utopia999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单调队列优化多重背包相关的知识,希望对你有一定的参考价值。
朴素的多重背包算法为
[
f[i][j]=max(f[i-1][j-kv_i]+kw_i)(kv_ile j,kle lim[i])?
]
时间复杂度为(O(Vsum lim[]))。
先枚举i。设(d=lfloorfrac{j}{lim[i]}
floor),(r=j-lim[i]cdot d)。则上述转移可改写为
[
f[i][j]=max(f[i-1][r+kv_i]+(d-k)w_i)
]
将(d)移到(max())外面,得
[
f[i][j]=max(f[i-1][r+kv_i]-kw_i)+dw_i
]
此时(max())中的项只与(k)有关了,可以用单调队列优化。复杂度为(O(nV))。
以上是关于单调队列优化多重背包的主要内容,如果未能解决你的问题,请参考以下文章