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