資料結構與演算法 貪心演算法

2021-08-14 18:47:49 字數 2034 閱讀 3807

1、給定 n 種物品和乙個揹包,物品 i 的重量是 w[i], 其價值是 p[i], 揹包的容量為 c。設物品已按單位重量價值遞減的次序排序。每種物品不可以裝入揹包多次,但可以裝入部分的物品 i。揹包問題是選擇裝入揹包中的物品,在不超過揹包容量的前提下使揹包的得總價值最大。用貪心法設計與實現乙個演算法,求解揹包問題。

#include

#include

#include

using namespace std;

typedef struct

char name[5];

float value;

float weight;

float rate;

}thing;

typedef struct

thing thing[3];

float value;

float weight;

float rate;

}bag;

void sort(thing thing1,thing thing2)

thing temp;

if(thing1.rate>thing2.rate)

temp = thing1;

thing1 = thing2;

thing2 = temp;

int main()

thing thing[3];

thing[0].value = 9;thing[1].value = 10;thing[2].value = 12;

thing[0].weight = 3;thing[1].weight = 5;thing[2].weight = 8;

thing[0].rate = thing[0].value/thing[0].weight;

thing[1].rate = thing[1].value/thing[1].weight;

thing[2].rate = thing[2].value/thing[2].weight;

strcpy(thing[0].name,"book");

strcpy(thing[1].name,"note");

strcpy(thing[2].name,"pen");

for(int i = 0;i<3;i++)

for(int j = 0;j<2;j++)

sort (thing[j],thing[j+1]);

cout<<"目前總共有以下物品:"coutbag.weight = 14;

int i = 0;

bag.rate = 0;

bag.value = 0;

while(bag.weight>0)

if(bag.weight-thing[i].weight >=0)

bag.weight -= thing[i].weight;

bag.thing[i].weight = thing[i].weight;

bag.value +=thing[i].value;

bag.rate += (bag.weight/14)/100;

bag.thing[i] = thing[i];

bag.thing[i].weight = thing[i].weight;

thing[i].weight = 0;

else

bag.thing[i].weight = bag.weight;

thing[i].weight -= bag.weight;

bag.value +=thing[i].rate*bag.weight;

bag.rate = 1;

strcpy(bag.thing[i].name,thing[i].name);

bag.weight = 14;

break;

if(i == 2)bag.weight = 14 - bag.weight;

i++;

cout<<"揹包外有以下物品:"coutif(strcmp(bag.thing[i].name,thing[i].name)==0)

cout

資料結構與演算法 貪心演算法

定義每個古董重量 揹包問題 在對問題求解時,總是作出在當前看來是最好的選擇。也就是說,不從整體上加以考慮,它所作出的僅僅是在某種意義上的區域性最優解 是否是全域性最優,需要證明 有一天海盜們截獲了一艘裝滿各種各樣古董的貨船,每一件都價值連城,一旦打碎就是去了價值,海盜船載重量為c,每件固定的重量為w...

資料結構與演算法 貪心演算法

有如下場景 針對一組資料,我們定義了限制值和期望值,希望從中選出幾個資料,在滿足限制值的情況下,期望值最大。為了達到上述目的,貪心演算法是其中的乙個解決方案。例如,路徑選擇問題,從 s 城市至 e 城市,在只能路過 2 個城市的情況下,如何走的最短,如下圖所示 英文全稱 greedy algorit...

資料結構與演算法 (2)貪心演算法

貪心演算法在對問題進行求解時,總是做出在當前看來最好的選擇,即不從整體最優上加以考慮,而是進行某種意義上的區域性最優解。一般將求解過程分成若干個步驟,但每個步驟都應用貪心原則,選取當前狀態下最好 最優的選擇 區域性最有利的選擇 並以此希望最後堆疊出的結果也是最好 最優的解 分析 1.確定初始位置和能...