二維0 1揹包問題 含java實現 動態規劃

2021-09-03 02:10:58 字數 962 閱讀 5638

**問題描述:**給定n種物品和一揹包。物品i的重量是wi,體積是bi,其價值為vi,揹包的容量為c,容積為d。問:應該如何選擇裝人揹包中的物品,使得裝入揹包中物品的總價值最大? 在選擇裝人揹包的物品時,對每種物品i只有兩種選擇,即裝入揹包或不裝入揹包。不能將物品i裝入揹包多次,也不能只裝入部分的物品i。試設計乙個解此問題的動態規劃演算法,並分析演算法的計算複雜性。

問題分析:m(i,j,k)是揹包容量為j,體積為k,可選擇物品為i,i+1,…n時0-1揹包問題的最優值。則遞迴公式為:

max(m(i+1,j,k), m(i+1,j-wi,k-bi)+vi)    ,j>=wi and k>=bi

m(i,j,k)=; //價值

int w = ; //重量

int b = ; //體積

int c = 10; //揹包容量

int d = 12; //揹包容積

int x = new int[v.length];

int m = new int[v.length][c+1][d+1];

knapsack(v,w,b,c,d,m);

traceback(m,w,c,d,x); }

public static void knapsack(int v,int w,int b,int c,int d,int m)

//填第0行

if(c>=w[0] && d>=b[0])

//輸出m陣列

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

}system.out.println();

} }//輸出哪個物品裝入了揹包

public static void traceback(int m,int w,int c, int d,int x)

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

}

演算法複雜度為o(ncd)

揹包衍化 二維01揹包

問題引入 有兩種物品 銷售,每種包裝裡兩種物品各有x,y x,yx,y個,售價為t tt元,共有s ss個 銷售的包裝。現在需要兩種物品n,m n,mn,m個,問如何購買可以滿足需要並且花費最少的錢 狀態轉移 設d i j d i j d i j 表示第 一 二種物品分別買了i,j i,ji,j個的...

二維揹包問題

步驟 1 建立目標域 即,多個揹包的可能性組合 2 判斷當前時刻的狀態值 例題 輸入 array m 5,n 3 輸出 4 解釋 總共 4 個字串可以通過 5 個 0 和 3 個 1 拼出,即 10 0001 1 0 解題思路 1.可用0和1的個數可以看成不同容量的揹包 二維 dp i j i 表示...

01揹包 分組揹包(一維 二維 搜尋

上面的 中寫了01揹包 分組揹包的一維,二維陣列方法,還有搜尋法以及自己的一些思考。個人對於網上分組揹包的二維轉移方程覺得還不太完善 或者我自己理解的不太對 而且沒有找到很完全的 可能恰好沒找到 所以就自己寫了,有附題目位址,如果想看二維陣列分組揹包,直接拉到最後,前面都是廢話。不想看原位址的,下面...