單調佇列優化的多重揹包

2021-09-26 14:36:00 字數 500 閱讀 4310

如題,使用單調佇列優化多重揹包能夠使得時間複雜度優化為o(nv)。

接下來,就來**一下如何優化可以使得複雜度比二進位制優化還要低

首先考慮狀態轉移:

細看上式不難明白,對於一種新來的物品,它的狀態必然是

於是單獨考慮每乙個餘數d:

對於(3)中的式子,我們考慮如何用盡量少的時間去找到max。在此我們引入單調佇列,o(1)求解max。

#include#include#includeusing namespace std;

const int n=20002;

int n,v;

int f[n],g[n]; //滾動陣列優化空間,g即f[i-1];

int q[n],s,e;

int main()}}

printf("%d\n",f[v]);

return 0;

}

多重揹包單調佇列優化思路 單調佇列優化多重揹包問題

6.多重揹包問題 iii acwing題庫 www.acwing.com 揹包九講bilibili www.bilibili.com 從公式中可以看出f j 和f j c 都是從s 1個數裡面取最大值,計算f j c 時只是將滑動視窗右移了一步,類似下圖的效果 只不過移動的時候,前面的s個元素都增加...

單調佇列優化多重揹包

多重揹包的最原始的狀態轉移方程 令 c i min num i j v i f i j max f i 1 j k v i k w i 1 k c i 這裡的 k 是指取第 i 種物品 k 件。如果令 a j v i b j v i 那麼 j a v i b.這裡用 k 表示的意義改變,k 表示取第...

單調佇列優化多重揹包

多重揹包 n個物品,揹包承重m,每個物品 重量 wi 價值vi 個數為ci 普通多重揹包複雜度 o nmc for int i 1 i n i for int j 1 j m j for int k 1 k c i k w i j k f i j max f i j f i 1 j k w i k ...