编辑代码

#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;
}