编辑代码

/**
 * 
 * @author bohu83
 * @2019-06-11
 */
public class FindMaxTest {
	
	static String[] names= {"故宫","颐和园","长城","天坛"};
	static int[] w = {1,2, 3, 1 };
	static int[] v = {7,8,9,6}; 
	static int[][] b = new int[5][5];
 
 
	public static void main(String[] args) {

        for (int i = 1; i <= 4; i++) {
        
            for (int j = 1; j <= 4; j++) {
            
                if ( j< w[i] ) {
                    b[i][j] = b[i - 1][j];                
                } else {               	
                    int value1 = v[i] + b[i - 1][j - w[i]]  ; 
                    int value2 = b[i - 1][j]; 
                    b[i][j] = Math.max(value1, value2);                    
                }
            }
        }
        System.out.println("value:"+b[3][3]);
        findMax(3,3);
	}
	

	public static void findMax(int i,int j){
		
		if(i>0){
			if(b[i][j]== b[i-1][j]){			
				System.out.println("not choose :"+names[i]+",value="+v[i]);
				findMax(i-1,j);
			}
			else if( b[i][j]==(v[i] + b[i - 1][j - w[i]]) ){			
				System.out.println("choose :"+names[i]+",value="+v[i]);
				findMax(i-1,j-w[i]);
			}
			
		}
		
	}
	
}