《剑指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[i][j]\)为到达位置\((i,j)\)取得礼物的最大值,因为第一行和第一列的位置只有一种走法,因此很容易初始化,对于位置\((i,j),i\geq1,j\geq1\)有两种走法,我们取其中最大的一种走法即可:
\]
class Solution {
public:
int maxValue(vector<vector<int>>& grid) {
int m = grid.size(), n = grid[0].size(),i,j;
vector<vector<int>> dp(m,vector<int>(n,0));
dp[0][0] = grid[0][0];
for(i = 1; i < m; ++i)
dp[i][0] = grid[i][0]+dp[i-1][0];
for(i = 1; i < n; ++i)
dp[0][i] = grid[0][i]+dp[0][i-1];
for(i = 1; i < m; ++i)
{
for(j = 1; j < n; ++j)
{
dp[i][j] = grid[i][j] + max(dp[i-1][j],dp[i][j-1]);
}
}
return dp[m-1][n-1];
}
};
结果:
执行用时 :20 ms, 在所有 C++ 提交中击败了27.55%的用户
内存消耗 :9.8 MB, 在所有 C++ 提交中击败了100.00%的用户
代码2
或者直接在原数据上求解:
class Solution {
public:
int maxValue(vector<vector<int>>& grid) {
int m = grid.size(), n = grid[0].size(),i,j;
for(i = 1; i < m; ++i)
grid[i][0] += grid[i-1][0];
for(i = 1; i < n; ++i)
grid[0][i] += grid[0][i-1];
for(i = 1; i < m; ++i)
{
for(j = 1; j < n; ++j)
{
grid[i][j] += max(grid[i-1][j],grid[i][j-1]);
}
}
return grid[m-1][n-1];
}
};
结果:
执行用时 :12 ms, 在所有 C++ 提交中击败了74.37%的用户
内存消耗 :9 MB, 在所有 C++ 提交中击败了100.00%的用户
《剑指offer》面试题47. 礼物的最大价值的更多相关文章
- 【剑指offer 面试题47】不用加减乘除做加法
思路: 利用位运算 C++: #include <iostream> using namespace std; int main() { , b = ; int sum, carry; d ...
- C++版 - 剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题,ZOJ 1088:System Overload类似)题解
剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题) 原书题目:0, 1, - , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字.求出这个圈圈里剩下的最后一个数字 ...
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- 剑指offer面试题3 二维数组中的查找(c)
剑指offer面试题三:
- 剑指Offer——笔试题+知识点总结
剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...
- C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...
- Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)
剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...
- C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...
随机推荐
- Position定位详解
Position CSS position属性用于指定一个元素在文档中的定位方式.top,right,bottom 和 left 属性则决定了该元素的最终位置. 在分析position元素定位之前,先 ...
- 解析Redis操作五大数据类型常用命令
摘要:分享经常用到一些命令和使用场景总结,以及对Redis中五大数据类型如何使用cmd命令行的形式进行操作的方法. 本文分享自华为云社区<Redis操作五大数据类型常用命令解析>,作者:灰 ...
- BZOJ 题目乱做
记录一点在 BZOJ 上做的题. 众所周知原 BZOJ 炸掉了,于是跑去了 HydroOJ 的 BZOJ 域上面做. 目录 P1001 [Beijing2006]狼抓兔子 P1002 [FJOI200 ...
- java 数据类型:集合接口Collection之常用ArrayList;lambda表达式遍历;iterator遍历;forEachRemaining遍历;增强for遍历;removeIf批量操作集合元素(Predicate);
java.util.Collection接口 Java的集合主要由两个接口派生出来,一个是Collection一个是Map,本章只记录Collection常用集合 集合只能存储引用类型数据,不能存储基 ...
- mkdir创建目录时,如果上级目录没有是创建不成功的
mkdir创建目录时,如果上级目录没有是创建不成功的 ,此时必须用 mkdirs()方法方可.
- powerdesigner 连接数据库
powerdesigner 连接数据库如图:
- Qt-Vnc远程
VNC简介 VNC(Virtual Network Computing)是基于RFB(Remote Frame Buffer)协议的远程系统,C/S端口默认为5900,B/S端口默认为5800. RF ...
- 使用 juqery.media.js 实现 pdf 预览
作用:可以实现在指定的位置预览PDF 缺点: (1)在iPad上只能预览一页PDF.(问题是iPad会将PDF转为img呈现,试了将img宽度设置为100%方法但并不好使) (2)在安卓上不能预览,依 ...
- 刷完 900 多题后的首次总结:LeetCode 应该怎么刷?
「负雪明烛」公众号是负雪明烛维护的一个算法题解公众号,致力于帮助大家刷题.找工作.欢迎关注. 大家好,我是负雪明烛.今天跟大家聊一聊「LeetCode应该怎么刷?」这个话题. 我是大二的时候开始接触 ...
- 【LeetCode】359. Logger Rate Limiter 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcode ...