【千字分析】剑指 Offer 47. 礼物的最大价值
我是小张同学,立志用更简洁的代码做更高效的表达
在一个 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
动态规划(二维):
第一时间想到二维dp数组,其中dp[i][j]为到第i行第j列时可获得的最大价值。
第i行第j列的最大价值(dp[i][j])可以为:
- 左边一格的最大价值(dp[i][j - 1])加目前格子(grid[i][j])
- 上面一格的最大价值(dp[i - 1][j])加目前格子(grid[i][j])
那么转移方程为:
dp[i][j]=max(dp[i−1][j],dp[i][j−1])+grid[i][j]dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]dp[i][j]=max(dp[i−1][j],dp[i][j−1])+grid[i][j]
考虑边界情况:
- i == 0, j == 0, 最左上角直接为格子本身(grid[i][j])
- i == 0, j != 0, 第一行没有上面格子只能是左边一格的最大价值(dp[i][j - 1])加目前格子(grid[i][j])
- i != 0, j == 0, 第一列没有左边格子只能是上面一格的最大价值(dp[i - 1][j])加目前格子(grid[i][j])
class Solution {public:int maxValue(vector<vector<int>>& grid) {int rows = grid.size(), cols = grid[0].size();int dp[rows][cols];for(int i = 0; i < rows; ++i) {for(int j = 0; j < cols; ++j) {if(i == 0 && j == 0) dp[i][j] = grid[i][j];else if(i == 0) dp[i][j] = dp[i][j-1] + grid[i][j];else if(j == 0) dp[i][j] = dp[i-1][j] + grid[i][j];else dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + grid[i][j];}}return dp[rows-1][cols-1];}
};
【千字分析】剑指 Offer 47. 礼物的最大价值相关推荐
- 【LeetCode】剑指 Offer 47. 礼物的最大价值
[LeetCode]剑指 Offer 47. 礼物的最大价值 文章目录 [LeetCode]剑指 Offer 47. 礼物的最大价值 package offer;public class Soluti ...
- leetcode剑指 Offer 47. 礼物的最大价值(动态规划)
在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0).你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格.直到到达棋盘的右下角.给定一个棋盘及其上面的礼 ...
- 【LeetCode笔记】剑指 Offer 47. 礼物的最大价值(Java、动态规划)
文章目录 题目描述 思路 && 代码 1. 常规动规 O(n2n^2n2) .O(n2n^2n2) 2. 滚动数组法 O(n2n^2n2) .O(nnn) 原地操作O(n2n^2n2) ...
- 【算法】剑指 Offer 47. 礼物的最大价值
1.概述 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0).你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格.直到到达棋盘的右下角.给定一个棋盘及 ...
- 牛客网 剑指offer JZ47 礼物的最大价值 Python 动态规划
描述 在一个m\times nm×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0).你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格.直到到达棋盘的右下角.给定 ...
- 剑指offer之礼物的最大值
题目描述: 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0).你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格.直到到达棋盘的右下角.给定一个棋盘 ...
- 剑指Offer:47.求1+2+3+...+n
题目描述 求1+2+3+-+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). //短路法:当n=0时跳出条件语句不再执行递归 p ...
- 【LeetCode】《剑指Offer》第Ⅴ篇⊰⊰⊰ 39 - 47题
[LeetCode]<剑指Offer>第Ⅴ篇⊰⊰⊰ 39 - 47题 文章目录 [LeetCode]<剑指Offer>第Ⅴ篇⊰⊰⊰ 39 - 47题 39. 数组中出现次数超过 ...
- LeetCode力扣(剑指offer 41-68)
目录 剑指 Offer 41. 数据流中的中位数 剑指 Offer 42. 连续子数组的最大和 剑指 Offer 43. 1-n 整数中 1 出现的次数 剑指 Offer 44. 数字序列中某一位的数 ...
最新文章
- [置顶] 浅析objc的消息机制
- etcd — 安装部署
- 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )
- 职场上面你面临的竞争
- 10字符串及整数操作符
- 01-Flutter移动电商实战-项目学习记录
- VS2010生成的文件在别的机器上运行提示“丢失MSVCR100D.dll”
- ERROR java.lang.NoClassDefFoundError
- 用ViewPager实现轮播效果
- ActiveXObject文件读写
- lwip连续发数据卡死_LwIP用TCP连接方式在数据量比较大协议栈卡死
- InnoDB关键特性之doublewrite
- python3d绘图代码_python机器学习之3D Matplotlib绘图
- 安装SQL2005出现服务器启动失败或者安装后启动服务器失败的原因及解决方法
- AutoCAD2012从入门到精通中文视频教程 第28课 文字和表格命令(1)(个人收藏)
- DM数据库归档备份还原
- 苹果用计算机加个微信怎么弄的,教你苹果怎么用双开微信,就是这么简单!
- Android 10.0强制所有app横屏显示
- QT5.14.2使用webkit引擎完成网页浏览
- etl工程师 面试题_关于数据仓库工程师的一般面试题目