揹包問題:
給定n種物品,1個揹包,揹包容量為c,每個物品i的價值為vi,重量為wi,如何選擇裝入物品能使揹包的總價值最大?
形式化描述:給定c >0, wi >0, vi >0 , 1≤i≤n.要求找一n元向量
a=(x1,x2,…,xn), 0<=xi<=1
【0~1表示取物品的某一部分】,1<=i<=n,使得
∑ wixi≤c
【物品的重量和小於揹包總容量】而且∑ vixi達到最大。
演算法思路:將物品按照單位重量價值進行排序(從大到小),將盡可能多的單位重量價值最高的物品裝入揹包,若將這種物品全部裝入揹包後,揹包還有多餘容量,則選擇單位重量價值次高的並盡可能多地裝入揹包。如果最後一件物品無法全部裝入,則計算可以裝入的比例,然後按比例裝入。
現有5個物品,1個揹包,揹包容量為45,各物品價值和重量如下:
價值重量204
4040306
205102
則將重:4、價值:20的物品、重:6、價值:30的物品、重:2、價值:10的物品、重:5、價值:20的物品全放入揹包
而重:40、價值:40的物品的0.7被放入了揹包
#include "stdafx.h"
#include #include using namespace std;
struct itemitems[100];
bool cmp(const item &a,const item &b)
int main()
sort(items,items+n,cmp);//按照單位重量的價值排序
int sum=0,j=0;
for(j=0;j
else break;
}if(j
delete v , w;
return 0;
}
基於貪心演算法的揹包問題
題目 有乙個揹包,揹包容量是m 150。有7個物品,物品可以分割成任意大小。要求盡可能讓裝入揹包中的物品總價值最大,但不能超過總容量。物品 a b c d e f g 重量 35 30 60 50 40 10 25 價值 10 40 30 50 35 40 30 實驗 include x 存放物品的...
揹包問題(貪心演算法)
揹包問題 程式8 4 2.cpp 定義控制台應用程式的入口點。揹包問題 貪心演算法 include stdafx.h define maxnumber 20 typedef struct node object float find object wp,int n,float m i 0 while...
貪心演算法 揹包問題
詳細見原帖 我寫的是自己的感悟 揹包問題 有乙個揹包,揹包容量是m 150。有7個物品,物品可以分割成任意大小。要求盡可能讓裝入揹包中的物品總價值最大,但不能超過總容量。物品 a b c d e f g 重量 35 30 60 50 40 10 25 價值 10 40 30 50 35 40 30 ...