題解:把物品按價效比排序 ,盡量取價效比高的。(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揹包就是完全...