package eg.nk_mt; import java.util.Scanner; /** * 01 背包,arr[i][j]为当前最优解 */ public class backpack01 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt();//物品种类个数 int [] weight = new int[n];//重量 int [] value = new int[n];//价值 for (int i = 0; i < n; i++) { weight[i] = in.nextInt(); } for (int i = 0; i < n; i++) { value[i] = in.nextInt(); } int target = in.nextInt();//背包容量 int[][] arr = new int[n][target + 1]; //初始化只有第一个物品时,背包中的价值 for (int i = weight[0]; i <= target; i++) { arr[0][i] = value[0]; } //依次轮转,把当背包中有二个、三个,,, for (int i = 1; i < n; i++) { // i 表示背包中可以放前(i + 1) 种物品 for (int j = weight[i]; j <= target; j++) { // j 表示当前背包的容量 arr[i][j] = Math.max(arr[i-1][j],arr[i-1][j - weight[i]] + value[i]);// 公式 } } for (int i = 0; i < n; i++) { for (int j = 0; j < target + 1; j++) { System.out.print(arr[i][j] + " "); } System.out.println(); } } }
01背包问题 java实现
最新推荐文章于 2024-09-16 12:44:29 发布