问题描述:每种物品仅有一件,wi代表物体i的重量,pi表示物体i的价值,物体不可拆分,可以选择放或不放。背包总容量M,求怎么放才能价值最大化?
分析:
java代码:
1 public class Package01 { 2 3 //3个物体的重量 4 public static int[] m = {3,4,5}; 5 6 //物体的价值 7 public static int[] p = {4,5,6}; 8 9 //背包的总容量 10 public static int M = 10; 11 12 //最优解递推式 13 public static int[][] result = new int[4][M+1]; 14 15 public static void main(String[] args){ 16 17 for(int i=1;i<=3;i++){ 18 for(int j=0;j<=10;j++){ 19 //如果背包的容量,放不下m[i],则不选m[i] 20 if(m[i-1] > j) 21 result[i][j] = result[i-1][j]; 22 else 23 { 24 //转移方程式:注意数组m和p的下标要-1,1~5对应0~4 25 result[i][j] = Math.max(result[i-1][j], result[i-1][j - m[i-1]] + p[i-1]); 26 } 27 } 28 } 29 //result[3][10]存的最大价值 30 System.out.print(result[3][10]); 31 } 32 33 34 }
时间: 2024-10-22 00:45:17