#include <stdio.h>
struct Fruit {
char name[20];
int weight;
int value;
};
void maximizeValue(struct Fruit fruits[], int n, int maxWeight) {
int dp[n+1][maxWeight+1];
for (int i = 0; i <= n; i++)
dp[i][0] = 0;
for (int j = 0; j <= maxWeight; j++)
dp[0][j] = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= maxWeight; j++) {
if (fruits[i-1].weight > j)
dp[i][j] = dp[i-1][j];
else
dp[i][j] = (dp[i-1][j] > (dp[i-1][j-fruits[i-1].weight] + fruits[i-1].value)) ?
dp[i-1][j] : (dp[i-1][j-fruits[i-1].weight] + fruits[i-1].value);
}
}
printf("装水果的策略:\n");
int i = n, j = maxWeight;
while (i > 0 && j > 0) {
if (dp[i][j] != dp[i-1][j]) {
printf("装入水果:%s, 重量:%dkg, 价值:%d元\n", fruits[i-1].name, fruits[i-1].weight, fruits[i-1].value);
j -= fruits[i-1].weight;
}
i--;
}
}
int main() {
int n = 4;
int maxWeight = 20;
struct Fruit fruits[] = {
{"苹果", 15, 300},
{"香蕉", 18, 180},
{"橘子", 10, 150},
{"猕猴桃", 9, 270}
};
maximizeValue(fruits, n, maxWeight);
return 0;
}