#include <iostream>
#include <math.h>
#include <string>
using namespace std;
class Commodity {
public:
string name;
int value;
int weight;
Commodity(string n, int w, int v) {
name = n;
value = v;
weight = w;
}
};
void getMaxValueForBackpack(int capacity, Commodity commodities[], int commodityCount) {
int maxValue = -1;
int maxValuePos = -1;
for (int i = 0; i < exp2(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;
cout << "I want to put "<<endl;
while (maxValuePos > 0) {
if (maxValuePos & 1 == 1) {
cout << commodities[curBit].name << "(";
cout << commodities[curBit].weight << ",";
cout << commodities[curBit].value << ");" <<endl;
}
maxValuePos = maxValuePos >> 1;
++curBit;
}
}
}
int main() {
Commodity commodities[] = {
Commodity("吉他", 15, 1500),
Commodity("笔记本电脑", 20, 2000),
Commodity("音响", 30, 3000)
};
getMaxValueForBackpack(35, commodities, 3);
Commodity fourcommodities[] = {
Commodity("吉他", 15, 1500),
Commodity("笔记本电脑", 20, 2000),
Commodity("音响", 30, 3000),
Commodity("苹果手机", 10, 2000)
};
getMaxValueForBackpack(40, fourcommodities, 4);
return 0;
}