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是多少時才知道...