揹包問題的自己理解

2021-07-12 01:35:01 字數 1345 閱讀 4741

public static void print(int a) 

system.out.println();

} }//完全的揹包問題

public static void comlete(int v, int w, int c, int m)

for (int j = w[n]; j <= c; j++)

//後面裝入的物品要根據前乙個裝入的價值判斷是否裝入

for (int i = n - 1; i >= 1; i--)

for (int j = w[i]; j <= c; j++)

} print(m);

int x = new int[6];

tracebake1(m, w, v, c, x);

} public static void knasp(int v, int w, int c, int m)

for (int j = w[n]; j <= c; j++)

for (int i = n-1; i >= 1; i--)

for (int j = w[i]; j <= c; j++)

} print(m);

int x = new int[6];

tracebake(m, w, c, x);

} private static void tracebake1(int m, int w,int v, int c, int x) else

} x[n] = (m[n][c] > 0) ? 1 : 0;

for (int a : x)

system.out.println();

} /**

* 回溯求解對於各個物品是否裝入

* @param m

* @param w

* @param c

* @param x

*/private static void tracebake(int m, int w, int c, int x) else

} x[n] = (m[n][c] > 0) ? 1 : 0;

for (int a : x)

} public static void main(string args) ; //物品的價值 建立6個只是為了統一下標

int w = new int ; //物品的重量

int m = new int[6][11]; //2維陣列記錄揹包的價值狀態

int c = 10; //揹包容量

knasp(v, w, c, m);

// comlete(v, w, c, m);

}

理解揹包問題

揹包問題總共有九種,0 1揹包式所有的基礎,所以首先研究0 1揹包 一 0 1揹包 問題陳述 有n件物品和乙個容量為v的揹包。第i件物品的費用是w,價值是v。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大若。1 動態規劃解決 f i,j 表示在前i件物品中選擇若干件放在承...

01揹包寫點自己的理解

01揹包是dp最經典的例子,深刻理解01揹包會對你有很大的幫助 動態規劃其實就是用之前已經求好的解,來求解現在要求解的問題 狀態轉移方程 dp i j max dp i 1 j dp i 1 j weight i value i 方程含義 若將當前物品放入揹包能增大value,則放入 dp i j ...

01揹包問題的理解

01揹包是 n個物品重量和價值分別為w i v i 揹包可以容納的重量為weight,怎麼裝下最大價值的物品?狀態轉移方程是 value i,w max value i 1,w w i v i value i 1,w 要求w的解,那麼先求w w i 的解,w w i 的值只有在知道了i是多少時才知道...