洛谷P1776 寶物篩選

2022-05-19 10:31:37 字數 437 閱讀 1608

題目大意:n種物品,揹包有容量w。現在每個物品價值p,重量v,數量k,求揹包能放物品的最大價值。

解題思路:多重揹包問題。

然而貌似直接列舉k是會超時的,所以需要加上優化。

我們把每個k拆成$2^0+2^1+2^2+...+2^n+x$的形式,然後進行揹包。

容易知道,這樣拆分出的物品能保證選取其中若干個相加可以的到0~k的所有數量,且原來有k件物品,現在只有$\log_2 k$件,大大減少運算量。

c++ code:

#include#includeint n,w,f[40005]=;

int main()

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

return 0;

}

洛谷P1776 寶物篩選

當年在tb桌前跪著聽懂了單調佇列優化多重揹包 然後那天下午codevs上的多重揹包一直過不去 現在codevs沒了,時間過得真快,有點心酸,當年bzoj也不知道,全在codevs上做題,好多 記錄都沒了。今天突然發現這題補掉,舒服了 includeusing namespace std const ...

洛谷P1776 寶物篩選

題目描述 終於,破解了千年的難題。小 ff 找到了王室的寶物室,裡面堆滿了無數價值連城的寶物。這下小 ff 可發財了,嘎嘎。但是這裡的寶物實在是太多了,小 ff 的採集車似乎裝不下那麼多寶物。看來小 ff 只能含淚捨棄其中的一部分寶物了。小 ff 對洞穴裡的寶物進行了整理,他發現每樣寶物都有一件或者...

洛谷p1776寶物篩選

寶物篩選 多重揹包問題 物品數目已知 可以列舉每個物品 當做01揹包來做 不過會超時 此時需要二進位制拆分來優化 分解成新的物品 再跑一遍01揹包即可 二進位制拆分 01揹包 設f j 表示前i件物品花費恰好為j的最大價值 include include using namespace std co...