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