用回溯法解决01背包,在控制台输入物品数,物品重量,物品价值,要求输出最大价值,和选择装入了哪几件物品,使用java语言
时间: 2024-03-17 07:46:36 浏览: 47
回溯法实现01背包问题JAVA版.txt
4星 · 用户满意度95%
好的,我可以帮你解决这个问题。以下是代码实现:
```
import java.util.Scanner;
public class KnapsackProblem {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入物品数:");
int n = scanner.nextInt();
int[] w = new int[n + 1]; // 物品重量
int[] v = new int[n + 1]; // 物品价值
int[][] dp = new int[n + 1][w + 1]; // 动态规划数组
for (int i = 1; i <= n; i++) {
System.out.print("请输入第" + i + "件物品的重量:");
w[i] = scanner.nextInt();
System.out.print("请输入第" + i + "件物品的价值:");
v[i] = scanner.nextInt();
}
System.out.print("请输入背包容量:");
int weight = scanner.nextInt();
// 动态规划处理
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= weight; j++) {
if (w[i] > j) {
dp[i][j] = dp[i - 1][j];
} else {
dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]);
}
}
}
System.out.println("最大价值为:" + dp[n][weight]);
System.out.print("选择装入的物品编号为:");
int i = n, j = weight;
while (i > 0 && j > 0) {
if (dp[i][j] != dp[i - 1][j]) {
System.out.print(i + " ");
j -= w[i];
}
i--;
}
}
}
```
希望可以帮助到你!
阅读全文