public class CompleteKnapsack {
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 completeKnapsack(weights, values, 4);
// return completeKnapsack(weights, values, 1);
}
private static int completeKnapsack(int[] weight, int[] value, int capacity) {
int[] dp = new int[capacity + 1];
for (int i = 0; i < weight.length; i++) {
// 与0、1背包不同,完全背包考虑的是同行更新过的元素,因为每个元素都可以重复使用
for (int j = weight[i]; j <= capacity; j++) {
dp[j] = Math.max(dp[j], dp[j - weight[i]] + value[i]);
}
}
return dp[capacity];
}
}
完全背包(DP优化版)
最新推荐文章于 2024-09-27 11:50:10 发布