貪心法(非0 1揹包問題)

2021-10-03 16:28:19 字數 1518 閱讀 8507

給定揹包容量50kg,物品資訊

物品1,重量10kg,價值60元

物品2,重量20kg,價值100元

物品3,重量30kg,價值120元

注意:可以部分裝入

和題目**

#pragma once

#include

#include

#include

#include

#include

using

namespace std;

const

int maxsize =3;

class

bags

bags

(int i)}~

bags()

void

init()

void

getmaxvalue()

sortposbyveachw

(pos)

;//for(int i:pos) cout << m_veachw[i] << endl;

int maxvalue =

enclosebypos

(pos)

; cout << maxvalue << endl;

}void

sortposbyveachw

(vector<

int>

& pos)}if

(!hasupdate)

break;}

}int

enclosebypos

(vector<

int>

&pos)

else

}return maxvalue;

}private

:int m_weight[maxsize]

, m_value[maxsize]

,m_veachw[maxsize]

;int m_bagcapcity;};

void

testforbag()

要注意的:

1,按 元/kg 做關聯排序,即只對位置排序,小心交換的位置不是直接下標,而是pos陣列中的資料

for(

int j =

0; j+

1< maxsize; j++

)2,函式的返回值盡量為空,大可以把返回值作為引用,如下

void

sortposbyveachw

(vector<

int>

& pos);//推薦使用乙個輸入,返回void

vector<

int>

&sortposbyveachw();

3,out_of_range:

i++;if

(i;4,貪心法:每次裝入的都是單位價值最高的

貪心法解決0 1揹包問題

貪心法是指 在揹包沒有裝滿之前,只要能裝得下就裝進揹包.在使用貪心法解決0 1揹包問題主要在於分解方案和貪心選擇方案.貪心法不能保證最優解 為了盡可能的得到最優解,選擇物品時,總是選擇v i w i 最大的物品裝進去 所以在程式的開始,應首先對物品按照v i w i 從大到小進行排序,因此在排序的過...

揹包問題 (貪心法)

問題 給定n個物品和乙個容量為c的揹包,物品i的重量為wi,其價值為vi,揹包問題是如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大。注意和0 1揹包的區別,在揹包問題中,可以將某種物品的一部分裝入揹包中,但不可以重複裝入。想法 每次裝入單位價值最大的物品。物品重量放在陣列w n 中,價值存放...

貪心法 揹包問題

貪心是一種解題策略,也是一種解題思想 使用貪心方法需要注意區域性最優與全域性最優的關係,選擇當前狀態的區域性最優並不一定能推導出問題的全域性最優 利用貪心策略解題,需要解決兩個問題 該題是否適合於用貪心策略求解 如何選擇貪心標準,以得到問題的最優 較優解 關於貪心法可以解決的揹包問題,這個物品是可以...