我是小张同学,立志用更简洁的代码做更高效的表达


在一个 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. 礼物的最大价值相关推荐

  1. 【LeetCode】剑指 Offer 47. 礼物的最大价值

    [LeetCode]剑指 Offer 47. 礼物的最大价值 文章目录 [LeetCode]剑指 Offer 47. 礼物的最大价值 package offer;public class Soluti ...

  2. leetcode剑指 Offer 47. 礼物的最大价值(动态规划)

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

  3. 【LeetCode笔记】剑指 Offer 47. 礼物的最大价值(Java、动态规划)

    文章目录 题目描述 思路 && 代码 1. 常规动规 O(n2n^2n2) .O(n2n^2n2) 2. 滚动数组法 O(n2n^2n2) .O(nnn) 原地操作O(n2n^2n2) ...

  4. 【算法】剑指 Offer 47. 礼物的最大价值

    1.概述 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0).你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格.直到到达棋盘的右下角.给定一个棋盘及 ...

  5. 牛客网 剑指offer JZ47 礼物的最大价值 Python 动态规划

    描述 在一个m\times nm×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0).你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格.直到到达棋盘的右下角.给定 ...

  6. 剑指offer之礼物的最大值

    题目描述: 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0).你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格.直到到达棋盘的右下角.给定一个棋盘 ...

  7. 剑指Offer:47.求1+2+3+...+n

    题目描述 求1+2+3+-+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). //短路法:当n=0时跳出条件语句不再执行递归 p ...

  8. 【LeetCode】《剑指Offer》第Ⅴ篇⊰⊰⊰ 39 - 47题

    [LeetCode]<剑指Offer>第Ⅴ篇⊰⊰⊰ 39 - 47题 文章目录 [LeetCode]<剑指Offer>第Ⅴ篇⊰⊰⊰ 39 - 47题 39. 数组中出现次数超过 ...

  9. LeetCode力扣(剑指offer 41-68)

    目录 剑指 Offer 41. 数据流中的中位数 剑指 Offer 42. 连续子数组的最大和 剑指 Offer 43. 1-n 整数中 1 出现的次数 剑指 Offer 44. 数字序列中某一位的数 ...

最新文章

  1. [置顶] 浅析objc的消息机制
  2. etcd — 安装部署
  3. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )
  4. 职场上面你面临的竞争
  5. 10字符串及整数操作符
  6. 01-Flutter移动电商实战-项目学习记录
  7. VS2010生成的文件在别的机器上运行提示“丢失MSVCR100D.dll”
  8. ERROR java.lang.NoClassDefFoundError
  9. 用ViewPager实现轮播效果
  10. ActiveXObject文件读写
  11. lwip连续发数据卡死_LwIP用TCP连接方式在数据量比较大协议栈卡死
  12. InnoDB关键特性之doublewrite
  13. python3d绘图代码_python机器学习之3D Matplotlib绘图
  14. 安装SQL2005出现服务器启动失败或者安装后启动服务器失败的原因及解决方法
  15. AutoCAD2012从入门到精通中文视频教程 第28课 文字和表格命令(1)(个人收藏)
  16. DM数据库归档备份还原
  17. 苹果用计算机加个微信怎么弄的,教你苹果怎么用双开微信,就是这么简单!
  18. Android 10.0强制所有app横屏显示
  19. QT5.14.2使用webkit引擎完成网页浏览
  20. etl工程师 面试题_关于数据仓库工程师的一般面试题目

热门文章

  1. 网络协议基础:ARP简析
  2. Websniff -aspx网页嗅探工具及使用说明
  3. 注册表操作(VC_Win32)
  4. 输入某年某月某日,判断这一天是这一年的第几天?(使用python语言)
  5. 看完这篇还不清楚Netty的内存管理,那我就哭了!
  6. 即构科技:解决行业痛点,以MSDN为基础构建全球实时音视频通信云
  7. 【线上分享】移动音视频SDK工程实践之数据采集和处理
  8. mac安装QT及QT基本使用
  9. LeetCode——链表
  10. 你一定听过这些不太标准的技术圈发音...