动态规划 礼物的最大值

2020-06-18 16:35 更新

题目

在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?

示例 1:

输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 12 解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物

提示:

0 < grid.length <= 200 0 < grid[0].length <= 200

解法

1.利用动态规划思想,最后一个值如何获得最大值?就是让他的前一项是最大的,再加上他就是最大。

2.往前套,画出表格列出公式

  1. max[i][j]=grid[i-1][j-1]+Math.max(max[i-1][j],max[i][j-1]);

在左边或者上边中寻找最大值加上自身的值

3放入循环之中

4.注意事项:数组的大小应该传入数组的大一格,不然要加入很多判断条件

  1. class Solution {
  2. public int maxValue(int[][] grid) {
  3. int n=grid.length;
  4. int m=grid[0].length;
  5. int max[][]=new int[n+1][m+1];
  6. for(int i=1;i<=n;i++){
  7. for (int j=1;j<=m;j++){
  8. max[i][j]=grid[i-1][j-1]+Math.max(max[i-1][j],max[i][j-1]);
  9. }
  10. }
  11. return max[n][m];
  12. }
  13. }
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号