单调队列优化多重背包

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))






以上是关于单调队列优化多重背包的主要内容,如果未能解决你的问题,请参考以下文章

单调队列优化多重背包

单调队列优化多重背包

单调队列优化多重背包

poj1742 Coins(多重背包+单调队列优化)

单调队列优化多重背包

单调队列优化多重背包