一个旅行者有一个最多能装m公斤的背包,现在有n中物品,每件的重量分别是W1、W2、……、Wn,每件物品的价值分别为C1、C2、……、Cn, 需要将物品放入背包中,要怎么样放才能保证背包中物品的总价值最大?
假设前n个物品,总承重为j,物品的重量为w,其最大价值为v[n,j]。
在背包的总承重不变的前提下,一个物品是否放入背包中直接影响到后面的物品是否能放入到背包中,即一个物品很重同事物品价值又很低时,若装入背包中直接导致其他更多的物品无法放入背包中,从而使得背包中的最大总价值变低。
当背包的承重为0,或者不将物品放入背包时,背包中的最大总价值均为0,即v[n,0]=v[0,n]=0。
放入当前物品n超过背包的最大承重时,则无法将该物品放入背包中,即v[n,j]=v[n-1,j]。
放入当前物品n不超过背包的最大承重时,则当前物品放入背包时的最大价值为vn+v[n-1,j-wn],不放入背包时的最大价值为v[n-1,j],因此对于当前物品是否放入背包中所能获得的最大价值为v[n,j]=max{ v[n-1,j],vn+v[n-1,j-wn] }。
public class beibao {
public static void main(String[] args) {
int n=6;
int[] profit = {200,90,140,150};//价值数组
int[] bulk = {1,3,2,5};//重量数组
int m =bulk.length;
int res = getMax(profit,bulk,n,m);
System.out.print(res);
}
public static int getMax(int[] profit,int[] bulk,int n,int m) {
int[][] max =new int[m+1][n+1];
for(int i=0;i=bulk[i-1]) {
max[i][j] = (max[i-1][j] > max[i-1][j-bulk[i-1]] + profit[i-1]) ? max[i-1][j] : max[i-1][j-bulk[i-1]] + profit[i-1] ;
System.out.println("\t---------- j="+j+" max[i-1][j]="+max[i-1][j]+" max[i-1][j-bulk[i-1]]+ profit[i-1]="+(max[i-1][j-bulk[i-1]]+ profit[i-1])+" ---------") ;
print_array(max) ;
}
}
System.out.println() ;
}
return max[m][n];
}
public static void print_array(int A[][]){
System.out.println("=======================================================================") ;
for (int i= 1;i
执行结果:
********* i=1 *********
---------- j=1 max[i-1][j]=0 max[i-1][j-bulk[i-1]]+ profit[i-1]=200 ---------
=======================================================================
200 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
=======================================================================
---------- j=2 max[i-1][j]=0 max[i-1][j-bulk[i-1]]+ profit[i-1]=200 ---------
=======================================================================
200 200 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
=======================================================================
---------- j=3 max[i-1][j]=0 max[i-1][j-bulk[i-1]]+ profit[i-1]=200 ---------
=======================================================================
200 200 200 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
=======================================================================
---------- j=4 max[i-1][j]=0 max[i-1][j-bulk[i-1]]+ profit[i-1]=200 ---------
=======================================================================
200 200 200 200 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
=======================================================================
---------- j=5 max[i-1][j]=0 max[i-1][j-bulk[i-1]]+ profit[i-1]=200 ---------
=======================================================================
200 200 200 200 200 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
=======================================================================
---------- j=6 max[i-1][j]=0 max[i-1][j-bulk[i-1]]+ profit[i-1]=200 ---------
=======================================================================
200 200 200 200 200 200
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
=======================================================================
********* i=2 *********
---------- j=3 max[i-1][j]=200 max[i-1][j-bulk[i-1]]+ profit[i-1]=90 ---------
=======================================================================
200 200 200 200 200 200
0 0 200 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
=======================================================================
---------- j=4 max[i-1][j]=200 max[i-1][j-bulk[i-1]]+ profit[i-1]=290 ---------
=======================================================================
200 200 200 200 200 200
0 0 200 290 0 0
0 0 0 0 0 0
0 0 0 0 0 0
=======================================================================
---------- j=5 max[i-1][j]=200 max[i-1][j-bulk[i-1]]+ profit[i-1]=290 ---------
=======================================================================
200 200 200 200 200 200
0 0 200 290 290 0
0 0 0 0 0 0
0 0 0 0 0 0
=======================================================================
---------- j=6 max[i-1][j]=200 max[i-1][j-bulk[i-1]]+ profit[i-1]=290 ---------
=======================================================================
200 200 200 200 200 200
0 0 200 290 290 290
0 0 0 0 0 0
0 0 0 0 0 0
=======================================================================
********* i=3 *********
---------- j=2 max[i-1][j]=0 max[i-1][j-bulk[i-1]]+ profit[i-1]=140 ---------
=======================================================================
200 200 200 200 200 200
0 0 200 290 290 290
0 140 0 0 0 0
0 0 0 0 0 0
=======================================================================
---------- j=3 max[i-1][j]=200 max[i-1][j-bulk[i-1]]+ profit[i-1]=140 ---------
=======================================================================
200 200 200 200 200 200
0 0 200 290 290 290
0 140 200 0 0 0
0 0 0 0 0 0
=======================================================================
---------- j=4 max[i-1][j]=290 max[i-1][j-bulk[i-1]]+ profit[i-1]=140 ---------
=======================================================================
200 200 200 200 200 200
0 0 200 290 290 290
0 140 200 290 0 0
0 0 0 0 0 0
=======================================================================
---------- j=5 max[i-1][j]=290 max[i-1][j-bulk[i-1]]+ profit[i-1]=340 ---------
=======================================================================
200 200 200 200 200 200
0 0 200 290 290 290
0 140 200 290 340 0
0 0 0 0 0 0
=======================================================================
---------- j=6 max[i-1][j]=290 max[i-1][j-bulk[i-1]]+ profit[i-1]=430 ---------
=======================================================================
200 200 200 200 200 200
0 0 200 290 290 290
0 140 200 290 340 430
0 0 0 0 0 0
=======================================================================
********* i=4 *********
---------- j=5 max[i-1][j]=340 max[i-1][j-bulk[i-1]]+ profit[i-1]=150 ---------
=======================================================================
200 200 200 200 200 200
0 0 200 290 290 290
0 140 200 290 340 430
0 0 0 0 340 0
=======================================================================
---------- j=6 max[i-1][j]=430 max[i-1][j-bulk[i-1]]+ profit[i-1]=150 ---------
=======================================================================
200 200 200 200 200 200
0 0 200 290 290 290
0 140 200 290 340 430
0 0 0 0 340 430
=======================================================================
430
作者:Wimb 来源:CSDN 原文:https://blog.csdn.net/qq_31278903/article/details/82843820