剑指 Offer 47. 礼物的最大价值


剑指 Offer 47. 礼物的最大价值

解题思路

拿现在东西的最大值和前面东西的状态有关,很容易想到动态规划。

dp数组含义: dp[i][j]代表从棋盘的左上角开始,到达单元格 (i,j)下标从0开始!! 时能拿到礼物的最大累计价值。

状态转移方程:
在这里插入图片描述

代码

class Solution {
    public int maxValue(int[][] grid) {
        int row = grid.length;
        int clo = grid[0].length;

        // dp[i][j]代表从棋盘的左上角开始,到达单元格 (i,j)下标从0开始!! 时能拿到礼物的最大累计价值。
        int[][] dp = new int[row][clo];

        //base case
        dp[0][0] = grid[0][0];
        for (int i = 1; i < clo; i++) {//初始化行是列在动,所以结尾条件是列长度
            //初始化第一行!只能从左边拿
            dp[0][i] = grid[0][i] + dp[0][i - 1];
        }
        for (int i = 1; i < row; i++) {
            //初始化第一列!只能从上边拿
            dp[i][0] = grid[i][0] + dp[i - 1][0];
        }

        //第一行、第一列已经初始化完了,直接从下标[1,1]开始
        for (int i = 1; i < row; i++) {
            for (int j = 1; j < clo; j++) {
                dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
            }
        }

        return dp[row - 1][clo - 1];
    }
}

文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录