标签:队列 rac inline math span 转移 max 时间复杂度 复杂
朴素的多重背包算法为
\[
f[i][j]=\max(f[i-1][j-kv_i]+kw_i)(kv_i\le j,k\le lim[i])?
\]
时间复杂度为\(O(V\sum lim[])\)。
先枚举i。设\(d=\lfloor\frac{j}{lim[i]}\rfloor\),\(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)\)。
标签:队列 rac inline math span 转移 max 时间复杂度 复杂
原文地址:https://www.cnblogs.com/utopia999/p/9757689.html