Jzoj3223 Ede的新揹包問題

2022-05-09 17:56:40 字數 573 閱讀 2426

題意:多重揹包,每次對於第i個物品不能選的情況求最大獲益,n,m<1000,q<30000

最簡單的方法肯定是暴力,每次詢問都做一次揹包,顯然這樣會超時

我們可以用二進位制分拆法或者是用單調佇列優化複雜度到o(qnm),可是依然不能過

注意到每次不能取的部分只有乙個,那我們考慮用字首和字尾分別維護,最後合併兩個部分的答案

f[i][j]表示做到第i個物品的狀態,g[i][j]表示倒著做i個物品的狀態

最後合併兩邊即可

#include#include#includeusing namespace std;

int w[10000],v[10000],t[1000],n=0;

int n,m,f[10010][1001],g[10010][1001];

inline void ins(int w,int v)

int calc(int x,int e)

int main()

for(int i=n;i;--i)

scanf("%d",&m);

for(int a,b,i=0;i}

Jzoj3223 Ede的新揹包問題

題意 多重揹包,每次對於第i個物品不能選的情況求最大獲益,n,m 1000,q 30000 最簡單的方法肯定是暴力,每次詢問都做一次揹包,顯然這樣會超時 我們可以用二進位制分拆法或者是用單調佇列優化複雜度到o qnm 可是依然不能過 注意到每次不能取的部分只有乙個,那我們考慮用字首和字尾分別維護,最...

Eden的新揹包問題 s 題解

題目鏈結 首先,50分做法 把原先的多重揹包二進位制拆分為01揹包 100分做法 考慮優化 設定狀態 f i j f i j f i j 表示到第 i ii 個時總體積為 j jj 的最大價值,那麼我們只要求 f d i 1 ei f d i 1 e i f di 1 e i 就可以把第 d id ...

HEOI2013 Eden 的新揹包問題

題面 原題過於繁複,這裡口述,多重揹包,多次詢問,每次詢問的揹包容量不一樣,並且每次詢問會規定乙個物品不能選 這個規定的物品每次詢問都會改變 題解首先考慮對詢問的兩個要求,容量不一樣很好處理,因為dp跑揹包的過程中本來就會記錄不同容量時的答案。對於規定乙個物品不能選怎麼處理呢?不計算這乙個物品,需要...