题解 | #训练聪明的牛II#

题目考察的知识点

  1. 动态规划:通过构建状态转移方程来解决问题,本题中使用动态规划来计算最少需要吃几块草料才能达到总重量。
  2. 数组和循环:使用数组来记录子问题的解,通过循环迭代来计算最终结果。

题目解答方法的文字分析

根据题目要求,我们需要计算牛最少需要吃几块草料才能达到总重量。首先,我们需要一个数组dp来记录子问题的解。数组的索引表示当前总重量,数组的值表示最少需要吃的草料块数。我们将数组初始化为最大安全整数,以便在后续计算中进行比较。

接下来,我们使用两层循环。外层循环遍历当前总重量从1到目标总重量,内层循环遍历草料的重量。对于每个草料重量,我们判断是否小于等于当前总重量,如果是,则尝试将当前草料块数加上1后和当前总重量减去草料重量的草料块数进行比较,更新dp数组中的最小值。

最后,返回dp数组中目标总重量对应的值,即最少需要吃的草料块数。如果值仍然为初始值,表示无法准确达到总重量,返回-1。

本题解析所用的编程语言

本题的解析使用了JavaScript作为编程语言。

完整且正确的编程代码

function minEatTimes(weights, totalWeight) {
  const n = weights.length;
  const dp = new Array(totalWeight + 1).fill(Number.MAX_SAFE_INTEGER);
  
  dp[0] = 0;

  for (let i = 1; i <= totalWeight; i++) {
    for (let j = 0; j < n; j++) {
      if (weights[j] <= i) {
        dp[i] = Math.min(dp[i], dp[i - weights[j]] + 1);
      }
    }
  }

  return dp[totalWeight] === Number.MAX_SAFE_INTEGER ? -1 : dp[totalWeight];
}
题解 | 前端刷题 文章被收录于专栏

题目考察的知识点 题目解答方法的文字分析 本题解析所用的编程语言 完整且正确的编程代码

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务