#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
struct Item {
int weight;
int value;
char name[50];
};
int knapsack(Item items[], int n, int capacity) {
int dp[n + 1][capacity + 1];
for (int i = 0; i <= n; ++i) {
for (int w = 0; w <= capacity; ++w) {
if (i == 0 || w == 0) {
dp[i][w] = 0;
} else if (items[i - 1].weight <= w) {
dp[i][w] = max(dp[i - 1][w], dp[i - 1][w - items[i - 1].weight] + items[i - 1].value);
} else {
dp[i][w] = dp[i - 1][w];
}
}
}
int w = capacity;
for (int i = n; i > 0 && w > 0; --i) {
if (dp[i][w] != dp[i - 1][w]) {
cout << "Selected item: " << items[i - 1].name << endl;
w -= items[i - 1].weight;
}
}
return dp[n][capacity];
}
int main() {
Item items[] = {{3, 5000, "相机"}, {2, 3000, "手机"}, {5, 6000, "笔记本电脑"}};
int n = sizeof(items) / sizeof(items[0]);
int capacity = 5;
int maxValue = knapsack(items, n, capacity);
cout << "最大价值为: " << maxValue << endl;
return 0;
}