揹包問題
問題描述:給定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 中,價值存放...