import java.util.Arrays; public class ZeroOneKnapsackBacktracking { static final int max_n = 5; static final int capacity = 15; static int[] w = { 12, 2, 1, 4, 1 }; // 物品重量数组 static int[] v = { 4, 2, 1, 10, 2 }; // 物品价值数组 static boolean[] selected = new boolean[max_n]; // 记录物品是否被选择 static int currentWeight = 0; // 当前已选物品的总重量 static int maxValue = 0; // 已找到的最大总价值 static int feasibleCount = 0; // 可能的可行解数量计数器 // 背包问题的回溯函数 static void backpack(int i) { if (i == max_n) { feasibleCount++; int totalValue = 0; int totalWeight = 0; for (int j = 0; j < max_n; j++) { if (selected[j]) { totalValue += v[j]; totalWeight += w[j]; } } if (totalWeight <= capacity && totalValue > maxValue) { maxValue = totalValue; } return; } selected[i] = true; backpack(i + 1); selected[i] = false; backpack(i + 1); } public static void main(String[] args) { backpack(0); System.out.println("最大总价值为:" + maxValue); System.out.println("可能的可行解数量为:" + feasibleCount); } }