#include <stdio.h>
#define MAX(a, b) ((a) > (b) ? (a) : (b))
void maximizeValue(int num_fruits, int max_weight, int weights[], int values[]) {
int dp[num_fruits + 1][max_weight + 1];
int i, j;
for (i = 0; i <= num_fruits; i++) {
for (j = 0; j <= max_weight; j++) {
dp[i][j] = 0;
}
}
for (i = 1; i <= num_fruits; i++) {
for (j = 1; j <= max_weight; j++) {
if (weights[i] <= j) {
dp[i][j] = MAX(dp[i-1][j-weights[i]] + values[i], dp[i-1][j]);
} else {
dp[i][j] = dp[i-1][j];
}
}
}
printf("装水果的策略:\n");
i = num_fruits;
j = max_weight;
while (i > 0 && j > 0) {
if (dp[i][j] != dp[i-1][j]) {
printf("水果%d\n", i);
j -= weights[i];
}
i--;
}
}
int main() {
int num_fruits = 4;
int max_weight = 20;
int weights[] = {0, 15, 18, 10, 9};
int values[] = {0, 300, 180, 150, 270};
maximizeValue(num_fruits, max_weight, weights, values);
return 0;
}