貪心演算法之 部分揹包問題

2021-10-23 05:22:45 字數 964 閱讀 7419

對了,貪心演算法還有一類部分揹包問題也挺經典:

下面以洛谷p2240為例,

阿里巴巴走進了裝滿寶藏的藏寶洞。藏寶洞裡面有 n(n \le 100)n(n≤100) 堆金幣,第 ii 堆金幣的總重量和總價值分別是 mi,vi(1<=mi,vi<=100)。阿里巴巴有乙個承重量為 t(t \le 1000)t(t≤1000) 的揹包,但並沒辦法將全部的金幣都裝進去。他想裝走盡可能多價值的金幣。所有金幣都可以隨意分割,分割完的金幣重量價值比(也就是單位**)不變。請問阿里巴巴最多可以拿走多少價值的金幣?

輸入格式

第一行兩個整數 n、t

接下來 n 行,每行兩個整數 mi,vi

輸出格式

乙個整數表示答案,輸出兩位小數

輸入輸出樣例

輸入 #1

4 50

10 60

20 100

30 120

15 45

輸出 #1

240.00

講真,這題的思路不難,所有金幣任意分割,這就是他跟動態規劃的區別。那你肯定是想先裝價值最高的金幣,畢竟貪心還是正常的。就按金幣的平均**排一下序,從價值最高的開始裝一直到裝滿就完事了。

這裡需要維護乙個平均價值的陣列,注意不能用int。

#includeusing namespace std;

struct tttemp[105];

int cmp(const tt &aa,const tt &bb)

sort(temp,temp+n,cmp);

for(int i=n-1;i>=0;--i)

else

}printf("%.2f",ans);

system("pause");

return 0;

}

部分揹包問題 貪心演算法

有n個商品,每個商品的重量為wi,為 pi,現有乙個揹包,最多能裝 的重量 其中 0 i 問 怎樣裝能使包中裝入的商品價值最高 對於每個商品可以只裝該商品的一部分 include stdio.h include iostream include stdlib.h define maxsize 100...

貪心演算法解決部分揹包問題

所謂貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,所做出的僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,但對範圍相當廣泛的許多問題他能產生整體最優解或者是整體最優解的近似解。貪心演算法的基本思路如下 1.建立數學模型來...

貪心演算法解決部分揹包問題

給定乙個最大容量為m的揹包和n種物品,有食鹽 白糖 大公尺等。已知第i種食品最多有wi公斤,其價值為vi元 公斤,請確定乙個裝貨方案,使得裝入揹包中的所有食品的總價值最大。考慮到物品可以分塊進行裝載,即每乙個物品按重量可分割,所以採用單位價值大的先裝滿的原則進行貪心,如下 include inclu...