/**
* Created by fhqplzj on 16-8-20 at 上午11:56.
*/
public class Knapsack {
private int knap(int[] w, int[] v, int W) {
assert w.length == v.length : "The length of w and v must be equal!";
int n = w.length;
int[][] dp = new int[n + 1][W + 1];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= W; j++) {
if (j < w[i - 1]) {
dp[i][j] = dp[i - 1][j];
} else {
dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - w[i - 1]] + v[i - 1]);
}
}
}
return dp[n][W];
}
private int knap2(int[] w, int[] v, int W) {
assert w.length == v.length : "The length of w and v must be equal!";
int n = w.length;
int[] dp = new int[W + 1];
for (int i = 0; i < n; i++) {
for (int j = W; j > 0; j--) {
if (j >= w[i]) {
dp[j] = Math.max(dp[j], dp[j - w[i]] + v[i]);
}
}
}
return dp[W];
}
public static void main(String[] args) {
Knapsack knapsack = new Knapsack();
int[] w = {2, 2, 6, 5, 4};
int[] v = {6, 3, 5, 4, 6};
int W = 10;
int result = knapsack.knap2(w, v, W);
System.out.println("result = " + result);
}
}
0-1背包问题
最新推荐文章于 2024-09-16 12:44:29 发布
