寶物篩選
多重揹包問題
物品數目已知
可以列舉每個物品
當做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 的形式,然後進行揹包。容易知道,這樣拆分出的物品能保證選取其中若干個相加可以的...