单调队列优化多重背包
朴素: fj ← max {fj, fj − v, fj − 2v, fj − 3v, ⋯, fj − sv}(假设 j ≥ sv)
1 | 0 1 2 3 ... v - 1 |
1 | q v+q 2v+q 3v+q ... pv+q |
dp[j+kv] 在队列中的实际应为 dp[j+kv]-kw
现在已知是第 i 个物品,同余类为 j,体积为 k = j + xv
假设单调队列中最大值为 a = j + yv,最后的 b = j + zv
判断出队:
k − a = (x − y)v
要求 x − y > s
那么 k − a > sv
a = j + yv
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 一个Oier!
