貪心法解決揹包問題

2021-09-22 20:04:24 字數 1378 閱讀 7686

揹包問題

問題描述:給定n 種物品和乙個容量為c的揹包,物品i的重量是wi,其價值為vi,揹包問題是如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大。注意:和0/1揹包問題的區別,在揹包問題中,可以將某種物品的一部分裝入揹包中,但不可重複裝入。

用貪心演算法求解揹包問題的關鍵是如何選擇貪心策略,使得按照一定的順序選擇每個物品,並盡可能的裝入揹包,直到裝滿。至少有三種貪心策略:

(1) 選擇價值最大的物品,因為這可以盡可能快地增加揹包的總價值。

(2) 選擇重量最輕的物品,因為這可以裝入盡可能多的物品。

(3) 選擇單位重量價值最大的物品

cout << "第" << i + 1 << "件物品要放:" << bags[i].need << endl;

return v;

}int main() );

} while (!cin.eof());*/

for (auto& it : bags)

vc.push_back(&it);

int v, w;

int size = 50;

auto maxvalue = (auto & a, auto & b) ;

auto minweight = (auto & a, auto & b) ;

auto maxcmp = (auto & a, auto & b) ;

cout << "----------------第一種演算法(價值最大):" << endl;

cout << judge(vc, maxvalue, size) << endl;

cout << "----------------第二種演算法(重量最輕):" << endl;

cout << judge(vc, minweight, size) << endl;

cout << "----------------第三種演算法(單位重量價值最大):" << endl;

cout << judge(vc, maxcmp, size) << endl;

return 0;

}

貪心法解決連續揹包問題

continuousknapsack w 1.n v 1.n l input n件物品的重量陣列w和價值陣列v,揹包承重l output 沒見物品放入揹包的重量陣列p 1.n 總價值c for i 1 to n do p i 0 r i v i w i sort r in decreasing or...

貪心法解決0 1揹包問題

貪心法是指 在揹包沒有裝滿之前,只要能裝得下就裝進揹包.在使用貪心法解決0 1揹包問題主要在於分解方案和貪心選擇方案.貪心法不能保證最優解 為了盡可能的得到最優解,選擇物品時,總是選擇v i w i 最大的物品裝進去 所以在程式的開始,應首先對物品按照v i w i 從大到小進行排序,因此在排序的過...

揹包問題 (貪心法)

問題 給定n個物品和乙個容量為c的揹包,物品i的重量為wi,其價值為vi,揹包問題是如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大。注意和0 1揹包的區別,在揹包問題中,可以將某種物品的一部分裝入揹包中,但不可以重複裝入。想法 每次裝入單位價值最大的物品。物品重量放在陣列w n 中,價值存放...