从左往右2

151 阅读1分钟
public class Test2 {
    public static void main(String[] args) {
        /**
         * 给定两个长度为n的数组weights和values
         * weights[i]和values[i]分别代表i号物品的重量和价值
         * 给定一个正数bag,表示一个载重bag的袋子
         * 你装的物品不能超过这个重量,
         * 返回你能装下最多的价值是多少?
         */
    }

    private static int getPrice(int[] weights,int[] values,int total,int index,int alreadyW){
        if(alreadyW > total){
            return -1;
        }
        if(index == weights.length){
            return 0;
        }
        int p1 = getPrice(weights,values,total,index+1,alreadyW);
        int p2Next = getPrice(weights,values,total,index+1,alreadyW+weights[index]);
        int p2 = -1;
        if(p2Next!=-1){
            p2 = values[index] + p2Next;
        }
        return Math.max(p1,p2);
    }

    private static int getPrice(int[] w,int[] v,int index,int rest){
        if(rest < 0){
            return -1;
        }
        if(index == w.length){
            return 0;
        }
        int p1 = getPrice(w,v,index+1,rest);
        int p2 = -1;
        int p2Next = getPrice(w,v,index+1,rest - w[index]);
        if(p2Next!=-1){
            p2 = p2Next + v[index];
        }
        return Math.max(p1,p2);
    }
}