實驗 貪心演算法之揹包問題 基於C 實現

2021-10-11 18:30:34 字數 988 閱讀 5496

揹包問題:

給定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 ...