洛谷p1776寶物篩選

2022-04-10 04:41:15 字數 719 閱讀 7345

寶物篩選

多重揹包問題

物品數目已知

可以列舉每個物品

當做01揹包來做

不過會超時

此時需要二進位制拆分來優化

分解成新的物品

再跑一遍01揹包即可

//

二進位制拆分+01揹包

//設f[j]表示前i件物品花費恰好為j的最大價值

#include #include

using

namespace

std;

const

int n = 1000000

;int

n, m, f[n], v[n], w[n], cnt, a, b, c;

intread()

while(isdigit(ch))

return s *w;

}int

main()

if(c) v[++cnt] = a * c, w[cnt] = b *c;

}for(int i = 1; i <= cnt; i++)

for(int j = m; j >= w[i]; j--)

f[j] = max(f[j], f[j - w[i]] +v[i]);

printf(

"%d\n

", f[m]);

return0;

}

謝謝收看, 祝身體健康!

洛谷P1776 寶物篩選

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

洛谷P1776 寶物篩選

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

洛谷P1776 寶物篩選

題目大意 n種物品,揹包有容量w。現在每個物品價值p,重量v,數量k,求揹包能放物品的最大價值。解題思路 多重揹包問題。然而貌似直接列舉k是會超時的,所以需要加上優化。我們把每個k拆成 2 0 2 1 2 2 2 n x 的形式,然後進行揹包。容易知道,這樣拆分出的物品能保證選取其中若干個相加可以的...