貪心演算法解決部分揹包問題

2021-10-12 11:18:36 字數 1708 閱讀 2655

給定乙個最大容量為m的揹包和n種物品,有食鹽、白糖、大公尺等。已知第i種食品最多有wi公斤,其價值為vi元/公斤,請確定乙個裝貨方案,使得裝入揹包中的所有食品的總價值最大。

考慮到物品可以分塊進行裝載,即每乙個物品按重量可分割,所以採用單位價值大的先裝滿的原則進行貪心,**如下:

#include

#include

#include

using

namespace std;

/** * @author xyr

* @time 2020/12/20

* @func 貪心演算法解決部分揹包問題

*/class

stuff

float

getvalue()

void

setname

(string name1)

void

setweight

(float w1)

void

setvalue

(float v1)

stuff()

stuff

(float v1,

float w1):v

(v1),w

(w1)

friend

void

knapsack

(stuff food,

float

* x,

int n,

float c);}

;bool

cmp(stuff a, stuff b)

void

knapsack

(stuff food,

float

* x,

int n,

float c)

else}}

intmain()

cout <<

"請輸入物品重量:"

<< n <<

"件 單位:公斤"

<< endl;

for(

int i =

0; i < n; i++

) cout <<

"請輸入物品價值:"

<< n <<

"件 單位:元/公斤"

<< endl;

for(

int i =

0; i < n; i++

)for

(int i =

0; i < n; i++

) stuff *food=

new stuff[n]

;for

(int j =

0; j < n; j++

)knapsack

(food, x, n, m)

;float sum =0;

for(

int i =

0; i < n; i++

) cout <<

"最大價值為:"

<< sum <<

"元"<< endl;

參考:用貪心演算法解揹包問題(裝載問題)

貪心演算法解決部分揹包問題

所謂貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,所做出的僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,但對範圍相當廣泛的許多問題他能產生整體最優解或者是整體最優解的近似解。貪心演算法的基本思路如下 1.建立數學模型來...

部分揹包問題 貪心演算法

有n個商品,每個商品的重量為wi,為 pi,現有乙個揹包,最多能裝 的重量 其中 0 i 問 怎樣裝能使包中裝入的商品價值最高 對於每個商品可以只裝該商品的一部分 include stdio.h include iostream include stdlib.h define maxsize 100...

貪心演算法之 部分揹包問題

對了,貪心演算法還有一類部分揹包問題也挺經典 下面以洛谷p2240為例,阿里巴巴走進了裝滿寶藏的藏寶洞。藏寶洞裡面有 n n le 100 n n 100 堆金幣,第 ii 堆金幣的總重量和總價值分別是 mi,vi 1 mi,vi 100 阿里巴巴有乙個承重量為 t t le 1000 t t 10...