public class ZeroOneBagOptimize {
public static void main(String[] args) {
System.out.println(test());
}
private static int test() {
int[] weights = {1, 3, 4};
// int[] weights = {2, 2, 3, 1, 5, 2};
int[] values = {15, 20, 30};
// int[] values = {2, 3, 1, 5, 4, 3};
return zeroOneBag(weights, values, 4);
// return zeroOneBag(weights, values, 1);
}
private static int zeroOneBag(int[] weights, int[] values, int bagSize) {
// dp含义:能获得的最大价值量
int[] dp = new int[bagSize + 1];
// 没有物品或者没有容量时,总价值都为0
for (int i = 0; i < values.length; i++) {
// 倒序遍历的原因就是因为一维数组,如果正序dp[j - weights[i]] + values[i]获取的就是新值
for (int j = dp.length - 1; j >= 0; j--) {
if (j >= weights[i]) {
dp[j] = Math.max(dp[j], dp[j - weights[i]] + values[i]);
}
}
}
return dp[bagSize];
}
}
01背包(DP优化版)
最新推荐文章于 2024-09-27 11:50:10 发布