6309 完全揹包 貪心價效比 dp

2021-09-26 06:57:45 字數 1650 閱讀 8459

題解:把物品按價效比排序 ,盡量取價效比高的。(ac只限此題)

這種方法是個水法 ,但對完全揹包一類問題的正確率可以達到90percent。

為什麼正確率能這麼高 ?

可以發現 , 乙個價效比高的物品 , 在完全揹包問題中 , 優勢可以變得很大(買很多) ,當揹包容量很大時便更顯示出其優勢。

10percent是什麼情況?

比如現在揹包容量為16 , 物品有6種:

代價 : 貢獻:

10        3

2          3

3          5

4          5

6          4

4          3

根據價效比排序後 , 排在第一位的是第3件物品,根據90per的貪心 , 我們盡量選他 , 於是選了5個,得到了25的貢獻 , 剩下1容量:很浪費,什麼也幹不了。

但是,我們可以只選4個3物品 , 貢獻為20 , 剩餘容量4 , 然後再買兩個2物品,20+6 = 26 >25!!!

這就是貪心錯的原因了 。

附上dp:(注意最終不能只取f[m],有可能m不能剛好取到)

mem(f,128);

f[0]=0;

for(int i=1;i<=n;i++) for(int j=0;j<=m;j++) (j - a[i]>=0) && (f[j] = max(f[j] , f[j - a[i]] + b[i]));

for(int i=0;i<=m;i++) ans = max(ans , f[i]);

return ;

附上貪心:

in(m) , in(n);

for(ll i=1;i<=n;i++) in(a[i]) , in(b[i]);

for(ll i=1;i<=n;i++) c[i] = (node);

sort(c+1,c+1+n ,cmpnode);

for(ll i=1;i<=n;i++)

printf("%lld",ans);

完全揹包 貪心 dp

考慮以下問題 有n nn種物品,第i ii種有z iz i zi 個,價值是y iy i yi 重量是w iw i wi 那麼把這些物品放入大小為x xx的揹包,的最大價值是多少 n,yi 50 wi,z i 10 9 n,y i leq 50 w i,z i leq 10 9 n,yi 50w i...

完全揹包dp

完全揹包類似題目 不過求最小值 杭電1114 揹包九講 基本形式 有 n 種物品和乙個容量為 v 的揹包,每種物品都有無限件可用。放入第 i 種 物品的費用是 c i 價值是 w i 求解 將哪些物品裝入揹包,可使這些物品的耗 費的費用總和不超過揹包容量,且價值總和最大。基本思路 這個問題非常類似於...

DP完全揹包

written with stackedit.每件物品不限數量 轉化為0 1揹包 每個物體盡可能多放 why?遞推式為 f i j max,kw i wf i,j max forall kw i f i,j max kw i w其他思路和01揹包相同.檢查每乙個k不會造成越界的k.0 1揹包就是完全...