编辑代码


class Main {
    String name;
    int value;
    int weight;

    Commodity(String n, int w, int v) {
        name = n;
        value = v;
        weight = w;

    public static void getMaxValueForBackPack(int capacity,Commodity[] commodities,int commodityCount){
        int maxValue = -1;
        int maxValuePos = -1;

        for(int i = 0;i<Math.pow(2,commodityCount);i++){
            int pos = i;
            int weight = 0;
            int value = 0;
            int curBit = 0;

            while(pos>0){
               if ((pos & 1) == 1) {
                    weight += commodities[curBit].weight;
                    value += commodities[curBit].value;
                }
                pos = pos >> 1;
                ++curBit;
            }

            if (weight <= capacity && maxValue < value) {
                maxValue = value;
                maxValuePos = i;
        }
    }

    if (maxValuePos > 0) {
            int curBit = 0;
            System.out.println("I want to put:");
            while (maxValuePos > 0) {
                if ((maxValuePos & 1) == 1) {
                    System.out.println(commodities[curBit].name + " (Weight: " + commodities[curBit].weight + ", Value: " + commodities[curBit].value + ")");
                }
                maxValuePos = maxValuePos >> 1;
                ++curBit;
                }
            }
        }
    }
    
	public static void main(String[] args) {
        Commodity[] commodities = {
            new Commodity("吉他", 15, 1500),
            new Commodity("笔记本电脑", 20, 2000),
            new Commodity("音响", 30, 3000)
        };

        getMaxValueForBackpack(35, commodities, 3);

        Commodity[] fourCommodities = {
            new Commodity("吉他", 15, 1500),
            new Commodity("笔记本电脑", 20, 2000),
            new Commodity("音响", 30, 3000),
            new Commodity("苹果手机", 10, 2000)
        };

        getMaxValueForBackpack(40, fourCommodities, 4);
    }
	}
}