給定n種物品和乙個揹包。物品i的重量是wi,其價值為vi,揹包的容量為c。應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大
選擇物品i裝入揹包時,可以選擇物品i的一部分,而不一定要全部裝入揹包,1≤i≤n。
因為每乙個物品都可以分割成單位塊,單位塊的利益越大顯然總收益越大,所以它區域性最優滿足全域性最優,可以用貪心法解決。
首先計算每種物品單位重量的價值v/w,然後按單位重量價值從大到小進行排序,根據貪心選擇策略,將盡可能多的單位重量價值最高的物品裝入揹包。或將這種物品全部裝入揹包後,揹包內的物品總重量未超過揹包容量,則選擇單位重量價值次高的物品並盡可能多地裝入揹包,依此策略一直進行下去,直到揹包裝滿為止。
**如下:
#includeusing namespace std;
//部分揹包問題,貪心演算法,其中goods第一列是物品重量,第二列是物品價值,goods已經按照(物品價值/物品重量)進行從高到底排序
int partbagproblem(int goods[2],int length,int maxvolume)
else
break;
} if(maxvolume != 0)
return maxvalue;
}int main()
,,};
cout<
演算法競賽 貪心演算法 01部分揹包問題
問題描述 有 n 個物體,第 i 個物體的重量為 wi,價值為 vi。在總重量不超過 c 的情況下,讓總價值盡量高。每乙個物體都可以只取走一部分,價值和重量按比例計算。解題思路 優先拿 價值除以重量的值 價效比 最高的,直到重量和正好為 c。由於可以只取一部分,所以一定可以取到重量和正好為 c 並且...
部分揹包問題 貪心演算法
有n個商品,每個商品的重量為wi,為 pi,現有乙個揹包,最多能裝 的重量 其中 0 i 問 怎樣裝能使包中裝入的商品價值最高 對於每個商品可以只裝該商品的一部分 include stdio.h include iostream include stdlib.h define maxsize 100...
貪心演算法解決部分揹包問題
所謂貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,所做出的僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,但對範圍相當廣泛的許多問題他能產生整體最優解或者是整體最優解的近似解。貪心演算法的基本思路如下 1.建立數學模型來...