1666. 桃饱

动态规划中的背包问题

  1. 定义一个二维数组,f[i][j]表示打了第i个菜且饭量为j时的最大总分数
  2. 输入这道菜的量和这道菜在桃桃内心的分数
  3. 判断是否打这道菜
    1. 不打(判断饭量不够 j < cap[i] ),则饭量j不变,当前打的菜为打的第i-1道菜,最大总分数不变

      *f[i][j] = f[i-1][j]*

    2. 打(判断饭量够 j >= cap[i] ),则当前打的菜为第i道菜,当前最大总分数为打第i-1道菜时,饭量为j-cap[i]的最大总分数加上当前打的第i道菜的分数

      *f[i][j] = f[i-1][j - cap[i]] + sc[i]*

  4. 若当前打的第i道菜累加的总分数比第i-1道菜的分数低的话也不打

    *f[i][j] = max(f[i][j], f[i-1][j - cap[i]] + sc[i])*

  5. 因此在比较前,可以初始化当前总分数为打第i-1道菜的分数,只有饭量够打当前这道菜时,才判断是否要打当前这道菜

    *f[i][j] = f[i-1][j]; if(j >= cap[i]) f[i][j] = max(f[i][j], f[i-1][j - cap[i]] + sc[i]);*