动态规划 礼物的最大值

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.往前套,画出表格列出公式

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

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

3放入循环之中

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



class Solution {
    public int maxValue(int[][] grid) {
        int n=grid.length;
        int m=grid[0].length;
        int max[][]=new int[n+1][m+1];
        for(int i=1;i<=n;i++){
            for (int j=1;j<=m;j++){
                max[i][j]=grid[i-1][j-1]+Math.max(max[i-1][j],max[i][j-1]);
            }
        }

        
        return max[n][m]; 
    }
}
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号