旅遊揹包 多維有界的揹包問題

2021-12-29 16:33:11 字數 2115 閱讀 9651

描述:

想去旅遊嗎?那得先準備揹包!

揹包用來裝旅遊物品,現在共n種(n<=50)旅遊物品,每種物品都有體積vi,重量wi,數量ci,價值ti (vi,wi,ci和ti都為整數)。

限制體積最多v立方厘公尺(v<=1000),重量最多w公斤(w<=500)。

請問你如何選擇物品,使得帶上的物品總價值最大,這個最大總價值為多少?

比如:物品     體積       重量    數量    價值

編號  (立方厘公尺)  (公斤)   (個)    (元)

1        30          3        10       4

2        50          8        10       5

3        10          2        10       2

4        23          5        8        3

5        130         20       5        11

若v為500,w為100,則選擇物品的最大價值為72(且72=10*4+10*2+4*3:由10件物品1,10件物品3,和4件物品4組成)。

這是乙個多維且有界的揹包問題,屬於常規0-1揹包問題的擴充套件問題。

輸入格式:

第一行,物品的種類n,揹包體積的限制v,揹包載重量的限制w。n,v和w的範圍如前所述。

接下來n行,每行為該種物品i的體積vi,重量wi,數量ci,價值ti (規定vi,wi,ci和ti都為整數)。

輸出格式:

僅一行,為選擇物品子集所能獲得的最大價值。

輸入樣例:

5 500 100

30 3 10 4

50 8 10 5

10 2 10 2

23 5 8 3

130 20 5 11

輸出樣例:

分析: 發現對於這個題目,很多同學使用直接的遞迴方式完成,這裡使用動態規劃的方法完成。

n種物品,每種物品體積v[i],重量w[i],c[i]件,價值t[i]。

設:m[i][x][y] 表示可選前i 種物品,所選物品總體積不超過x ,總重量不超過y ,的最大價值。

首先對三維陣列初始化為0;

存在如下遞迴關係:

當 i=1 時:

m[1][x][y]=0                                      x

m[1][x][y]=min(x/v[1],y/[w[1],c[1])*t[1]          x>=v[1]&&y>=w[1];

當 i>1 時:

m[i][x][y]=max      x>=v[i]&&y>=w[i];   其中:  0

m[i][x][y]=m[i-1][x][y]                                             x

k表示揹包能放入i物品最多的件數;

**如下:

#include

using namespace std;

int m[51][1001][501]=; //m[i][j][k] 表示可選前i 種物品,總體積不超過j, 總重量不超過k 的最大值

int v_arr[51]; //物品體積

int w_arr[51]; //重量

int c_arr[51]; //件數

int t_arr[51]; //價值

int min(int a,int b,int c)

else

m[i][x][y]=m[i-1][x][y];

} }

int main(){

int n=0; //物品種類

int v=0; //揹包體積

int w=0; //揹包載重

cin>>n>>v>>w;

for(int i=1;i<=n;i++)

cin>>v_arr[i]>>w_arr[i]>>c_arr[i]>>t_arr[i];

func(v, w, n);

cout<

多維多重揹包問題 01揹包,完全揹包,多重揹包

csdn 專業it技術社群 登入 blog.csdn.net有n件物品和乙個容量為v的揹包。第i件物品的費用是w i 價值是v i 求將哪些物品裝入揹包可使價值總和最大。1.1空間優化 這要求在每次主迴圈中我們以 v v 0 的遞減順序計算 f v 這樣才能保證計算 f v 時 f v ci 儲存的...

多維多重揹包問題 多重揹包問題

悼念512汶川大 遇難同胞 珍惜現在,感恩生活 急!災區的食物依然短缺!為了挽救災區同胞的生命,心繫災區同胞的你準備自己採購一些糧食支援災區,現在假設你一共有資金n元,而市場有m種大公尺,每種大公尺都是袋裝產品,其 不等,並且只能整袋購買。請問 你用有限的資金最多能採購多少公斤糧食呢?後記 人生是乙...

多維多選的揹包問題

0 1揹包問題是一類典型的組合優化問題,它要求找出n個物體的乙個子集使其盡可能的裝滿容量為w的揹包。他本質上是乙個只有乙個約束條件的0 1規劃問題,在計算理論上屬於np完全問題,計算複雜性為o 2 n 隨著該問題的發展,產生了該問題的許多變形。例如 多選擇揹包問題 有界揹包問題 無界揹包問題 多約束...