#include <stdio.h>
#define FRUIT_COUNT 4
#define MAX_WEIGHT 20
// 定义每种水果的重量和价值
int fruits[][2] = {
{15, 300}, // 苹果
{18, 180}, // 香蕉
{10, 150}, // 橘子
{9, 270} // 猕猴桃
};
int max(int a, int b) {
return (a > b) ? a : b;
}
void printStrategy(int dp[][MAX_WEIGHT + 1], int weight, int n) {
if (weight <= 0 || n <= 0) {
return;
}
if (dp[n][weight] == dp[n - 1][weight - fruits[n - 1][0]] + fruits[n - 1][1]) {
printStrategy(dp, weight - fruits[n - 1][0], n - 1);
printf("装入水果%d:重量%dkg,价值%d元\n", n, fruits[n - 1][0], fruits[n - 1][1]);
} else {
printStrategy(dp, weight, n - 1);
}
}
int main() {
int dp[FRUIT_COUNT + 1][MAX_WEIGHT + 1] = {0};
// 动态规划计算最大价值
for (int i = 1; i <= FRUIT_COUNT; i++) {
for (int j = 1; j <= MAX_WEIGHT; j++) {
if (j >= fruits[i - 1][0]) {
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - fruits[i - 1][0]] + fruits[i - 1][1]);
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
printf("装水果的策略:\n");
printStrategy(dp, MAX_WEIGHT, FRUIT_COUNT);
return 0;
}