class Main {
public static void main(String[] args) {
String[] fruits = {"苹果", "香蕉", "橘子", "猕猴桃"};
int[] weights = {15, 18, 10, 9};
int[] values = {300, 180, 150, 270};
int backpackCapacity = 20;
int[][] dp = new int[fruits.length + 1][backpackCapacity + 1];
for (int i = 1; i <= fruits.length; i++) {
for (int j = 1; j <= backpackCapacity; j++) {
if (weights[i - 1] <= j) {
dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weights[i - 1]] + values[i - 1]);
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
int maxValue = dp[fruits.length][backpackCapacity];
System.out.println("背包中水果的总价值:" + maxValue);
System.out.println("装水果的策略:");
int i = fruits.length;
int j = backpackCapacity;
while (i > 0 && j > 0) {
if (dp[i][j] != dp[i - 1][j]) {
System.out.println(fruits[i - 1] + " 重量:" + weights[i - 1] + " 价值:" + values[i - 1]);
j -= weights[i - 1];
}
i--;
}
}
}