首页 > 代码库 > 动态规划—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背包