编辑代码

function optimizeBackpack() {
  const fruits = [
    { name: '苹果', weight: 15, value: 300 },
    { name: '香蕉', weight: 18, value: 180 },
    { name: '橘子', weight: 10, value: 150 },
    { name: '猕猴桃', weight: 9, value: 270 }
  ];
  const capacity = 20;
  const n = fruits.length;

  const dp = new Array(n + 1).fill(0).map(() => new Array(capacity + 1).fill(0));

  for (let i = 1; i <= n; i++) {
    for (let j = 1; j <= capacity; j++) {
      if (fruits[i - 1].weight > j) {
        dp[i][j] = dp[i - 1][j];
      } else {
        dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - fruits[i - 1].weight] + fruits[i - 1].value);
      }
    }
  }

  let i = n;
  let j = capacity;
  const strategy = [];

  while (i > 0 && j > 0) {
    if (dp[i][j] !== dp[i - 1][j]) {
      strategy.push(fruits[i - 1].name);
      j -= fruits[i - 1].weight;
    }
    i--;
  }

  console.log('装水果策略:', strategy);

  return dp[n][capacity];
}

console.log('最大总价值:', optimizeBackpack());