問題:在選擇物品i裝入揹包時,可以選擇物品的一部分,而不一定要全部裝入揹包。
計算每種物品的單位重量價值作為貪心選擇的依據指標,選擇單位重量價值最高的物品,將盡可能多的該物品裝入揹包,依此策略一直地進行下去,直到揹包裝滿為止。
在零一揹包問題中貪心選擇之所以不能得到最優解原因是貪心選擇無法保證最終能將揹包裝滿,部分閒置的揹包空間使每公斤揹包空間的價值降低了。
#include#includeusing namespace std;
#define n 4
void knapsack(float m,float v,float w,float x);
int main()
; //每種物品的重量
float v=;
//每種物品的價值
float x[n+1]=;
//記錄結果的陣列
knapsack(m,v,w,x);
for(int i=1;i<=n;i++)
// cout<<"["break;
x[i]=1;
m-=w[i];
}
//物品部分被裝下
if(i<=n)
x[i]=m/w[i];
}
用貪心演算法解決揹包問題
貪心演算法 顧名思義,貪心演算法 總是能做到當前看來是最好的選擇。也就是說貪心演算法並不從整體最優上加以考慮,它所作出的選擇只是在某種意義上的 區域性最優選擇 所謂貪心選擇性質是指所求問題的整體最優解可以通過一系列區域性最優的選擇,是貪心演算法與動態規劃演算法的主要區別。0 1揹包問題 給定n種物品...
貪心法解決揹包問題
揹包問題 問題描述 給定n 種物品和乙個容量為c的揹包,物品i的重量是wi,其價值為vi,揹包問題是如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大。注意 和0 1揹包問題的區別,在揹包問題中,可以將某種物品的一部分裝入揹包中,但不可重複裝入。用貪心演算法求解揹包問題的關鍵是如何選擇貪心策略,...
貪心法解決連續揹包問題
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...