#include <iostream>
#include <cstring>
using namespace std;
const int N = 1000;
int n = 5;
int weight[N] = {6, 5, 4, 2, 1};
int value[N] = {5, 3, 5, 3, 2};
int W = 10;
int maxValue = 0;
int bestSelected[N];
void backtrack(int i, int w, int v)
{
if (w > W) return;
if (v > maxValue)
{
maxValue = v;
memcpy(bestSelected, selected, sizeof selected);
}
if (i == n) return;
selected[i] = 1;
backtrack(i+1, w+weight[i], v+value[i]);
selected[i] = 0;
backtrack(i+1, w, v);
}
int main()
{
backtrack(0, 0, 0);
cout << "最大价值: " << maxValue << endl;
cout << "选择的物品: ";
for (int i = 0; i < n; i++)
{
if (bestSelected[i])
cout << i << " ";
}
cout << endl;
return 0;
}