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[weight.length][capacity + 1];
for (int i = weight[0]; i <= capacity; i++) {
dp[0][i] = dp[0][i - weight[0]] + value[0];
}
for (int i = 1; i < weight.length; i++) {
for (int j = 1; j <= capacity; j++) {
if (j >= weight[i]) {
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - weight[i]] + value[i]);
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
return dp[weight.length - 1][capacity];
}
}
完全背包(DP未优化版)
最新推荐文章于 2024-09-27 11:50:10 发布