#include <stdio.h>
int max(int a, int b) {
return (a > b) ? a : b;
}
int main() {
int values[] = {3000, 2000, 1500};
int weights[] = {4, 3, 1};
char* items[] = {"音响", "笔记本电脑", "吉他"};
int W = 4;
int n = sizeof(values) / sizeof(values[0]);
int dp[n+1][W+1];
int selected[n];
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= W; j++) {
dp[i][j] = 0;
}
selected[i] = 0;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= W; j++) {
if (weights[i-1] <= j) {
dp[i][j] = max(dp[i-1][j], dp[i-1][j-weights[i-1]] + values[i-1]);
} else {
dp[i][j] = dp[i-1][j];
}
}
}
int j = W;
for (int i = n; i > 0; i--) {
if (dp[i][j] != dp[i-1][j]) {
selected[i-1] = 1;
j -= weights[i-1];
}
}
printf("可盗窃的商品最大价值为:%d\n", dp[n][W]);
printf("选择的商品为:");
for (int i = 0; i < n; i++) {
if (selected[i] == 1) {
printf("%s ", items[i]);
}
}
return 0;
}