图解LeetCode——剑指 Offer 47. 礼物的最大价值

简介: 图解LeetCode——剑指 Offer 47. 礼物的最大价值

一、题目

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

二、示例

2.1> 示例 1:

提示:

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

三、解题思路

  • 根据题目描述,我们需要计算出一条获取礼物的路径,确保按照这条路径走下来之后,可以拿到最多的礼物价值。那么在题目中,我们先来挖掘出一下关键的信息:

礼物价值】每个礼物的价值都大于0

起点左上角格子;

终点右下角格子;

行走步数】每次只能走1个格子;

行走方向】只能向右或者向下移动;(最关键的信息!!)

  • 那么,了解了题目中给出的关键点,我们就可以尝试移动一下,以下图为例,我们从【格子1】开始移动,可以向右移动,那么礼物总价值是1+3=4;也可以向下移动,那么礼物总价值是1+1=2
  • 所以,我们定义dp[i][j],用于表示在grid[i][j]格子出,最大的礼物总价值;我们以下图中格子3为例,能够到达这个格子只能是从格子1走过来(因为格子3的上面已经没有格子了),那么格子3的dp就等于4。而我们再来看格子5,到达它的路径就有两条:一条是从格子3向下走过来;另一条就是从第二行的格子1向右走过来的。那么由于dp是表示最大的礼物总价值,所以我们通过对比,可以知道从格子3向下走到格子5之后,总礼物价值是9;而从第二行的格子1向右走到格子5之后,礼物总价值是7;由于9大于7,所以格子5的dp等于9;依次类推,遍历整个二维数组grid,那么右下角的dp值就是这道题的答案了。
  • 为了更好的演示计算过程,请见下图的计算过程:

【说明】

  • 左上角五角星表示起始点;
  • 右下角五角星表示结束点;
  • 箭头表示可能行走的路径;
  • 圆圈表示到达某个格子后,总的礼物价值;

四、代码实现

classSolution {
publicintmaxValue(int[][] grid) {
introw=grid.length, col=grid[0].length;
int[][] dp=newint[row+1][col+1];
for (inti=1; i<=row; i++) {
for (intj=1; j<=col; j++) {
dp[i][j] =grid[i-1][j-1] +Math.max(dp[i-1][j], dp[i][j-1]);  
            }
        }
returndp[row][col];
    }
}

来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/li-wu-de-zui-da-jie-zhi-lcof

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

相关文章
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
38 6
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
33 4
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 49. 丑数
解决剑指 Offer 49题"丑数"的Python实现,通过动态规划的方法计算出第n个丑数。
30 2
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 04. 二维数组中的查找
剑指Offer题目 "二维数组中的查找" 的Python解决方案,包括非递归迭代、递归以及使用内置函数的二分查找方法,以判断一个有序的二维数组中是否含有给定整数。
28 1
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 03. 数组中重复的数字
解决剑指Offer题目 "数组中重复的数字" 的Python实现方法,通过使用字典来记录数组中每个数字的出现次数,快速找出重复的数字。
26 1
|
1月前
|
iOS开发 MacOS
【Mac系统】解决Vscode中LeetCode插件不能刷剑指offer题库
文章讨论了解决Mac系统中Vscode里LeetCode插件无法刷剑指Offer题库的问题,并提供了一些相关的使用技巧和资源链接。
85 1
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
16 4
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
39 5
|
1月前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
14 3
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - II. 从上到下打印二叉树 II
本文提供了一种Python实现方法,用于层次遍历二叉树并按层打印结果,每层节点按从左到右的顺序排列,每层打印到一行。
27 3