稍微了解了一下记忆化搜索,有了个大概的印象
public class Main {
private static int n, W;
private static int w[], v[];
private static int[][] dp;
public static void main(String[] args) {
n = 4;
w = new int[]{2, 1, 3, 2};
v = new int[]{3, 2, 4, 2};
dp = new int[101][10001];
W = 5;
System.out.println(rec(0, W));
}
private static int rec(int i, int j) {
if (dp[i][j] > 0) {
return dp[i][j];
}
if (i == n) {
return 0;
} else if (j < w[i]) {
// 无法挑选这个物体,跳过
dp[i][j] = rec(i + 1, j);
} else {
dp[i][j] = Math.max(rec(i + 1, j), rec(i + 1, j - w[i]) + v[i]);
}
return dp[i][j];
}
}