#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
void knapsack(vector<int>& value, vector<int>& weight, int n, int capacity) {
vector<vector<int>> dp(n + 1, vector<int>(capacity + 1, 0));
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= capacity; j++) {
if (weight[i - 1] > j) {
dp[i][j] = dp[i - 1][j];
} else {
dp[i][j] = max(dp[i - 1][j - weight[i - 1]] + value[i - 1],
dp[i - 1][j]);
}
}
}
cout << "装入水果的策略:" << endl;
int i = n, j = capacity;
while (i > 0 && j > 0) {
if (dp[i][j] != dp[i - 1][j]) {
cout << "装入第" << i << "个水果" << endl;
j -= weight[i - 1];
}
i--;
}
cout << "总价值:" << dp[n][capacity] << endl;
}
int main() {
int n = 4;
int capacity = 20;
vector<int> weight = {15, 18, 10, 9};
vector<int> value = {300, 180, 150, 270};
knapsack(value, weight, n, capacity);
return 0;
}