#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;
}
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;
}