阿里面试背包问题

  一个旅行者有一个最多能装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] }。

阿里面试背包问题_第1张图片

代码:

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 

     


 
 

你可能感兴趣的:(面试)