编辑代码

#include <stdio.h>
#include <stdlib.h>

struct Commodity{
    char name[25];
    int weight;
    int value;
};

int pow(int num,int i){
    for(int j=0;j<i-1;j++){
        num=num*2;
    }
    return num;
}

void getMaxValueForBackpack(int capacity,struct Commodity commodities[], int commodityCount) {

    int maxValue = -1;
    int maxValuePos = -1;

    for (int i = 0; i < 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;
                //printf("%d %d",weight,value);
            }
            pos = pos >> 1;
            ++curBit;
        }

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

    if (maxValuePos > 0) {

        int curBit = 0;
        printf("I want to put\n");
        while (maxValuePos > 0) {
            if (maxValuePos & 1 == 1) {
                printf("%s(%d,%d);\n",
                commodities[curBit].name,commodities[curBit].weight,commodities[curBit].value);
            }
            maxValuePos = maxValuePos >> 1;
            ++curBit;
        }
    }
}

int main () {
    struct Commodity commoditys[3]={
        "吉他", 15, 1500,
        "笔记本电脑", 20, 2000,
        "音响", 30, 3000
    };
    getMaxValueForBackpack(35, commoditys, 3);

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

    getMaxValueForBackpack(40, fourcommodities, 4);
    return 0;
}