@(labuladong的算法小抄)[dp]
leetcode 0-1背包问题
题目描述
解题思路
参考:labuladong的算法小抄P188
class Solution {
public int knapsack(int W, int N, int[] wt, int[] val) {
/* 定义:对于前i个物品,当前背包容量为w,可装的最大价值为dp[i][w] */
/* base case dp[...][0] = dp[0][...] = 0 */
int[][] dp = new int[N + 1][W + 1];
for (int i = 1; i <= N; i++) {
for (int w = 1; w <= W; w++) {
/* 如果背包容量不够了,只能选择不装入背包 */
if (w - wt[i - 1] < 0) {
dp[i][w] = dp[i - 1][w];
} else {
dp[i][w] = Math.max(
dp[i - 1][w - wt[i - 1]] + val[i - 1], //装入背包
dp[i - 1][w] //不装入背包
);
}
}
}
return dp[N][W];
}
}