首页 > 代码库 > 动态规划—0/1背包
动态规划—0/1背包
问题描述:每种物品仅有一件,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 else23 {24 //转移方程式:注意数组m和p的下标要-1,1~5对应0~425 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 }
动态规划—0/1背包
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。