剑指offer——礼物的最大价值(c++)
2019-06-13 19:39
916 查看
题目描述
在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物?
样例:
输入: [ [2,3,1], [1,7,1], [4,6,1] ] 输出:19 解释:沿着路径 2→3→7→6→1 可以得到拿到最大价值礼物。
思路
动态规划
dp[i][j] 代表走到(i,j)这个位置的最大价值
dp[0][0] = values[0][0]
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + values[i][j]
class Solution { public: int getMaxValue(vector<vector<int>>& grid) { if(grid.empty() || grid[0].empty()) return 0; int m = grid.size(), n = grid[0].size(); vector<vector<int>> dp(m, vector<int>(n)); dp[0][0] = grid[0][0]; for(int i = 1; i < n; ++i){ dp[0][i] = dp[0][i-1] + grid[0][i]; } for(int j = 1; j < m; ++j){ dp[j][0] = dp[j-1][0] + grid[j][0]; } for(int i = 1; i < m; ++i){ for(int j = 1; j < n; ++j){ dp[i][j] = max(dp[i][j-1],dp[i-1][j]) + grid[i][j]; } } return dp[m-1][n-1]; } };
相关文章推荐
- 剑指Offer(第二版)面试题47:礼物的最大价值
- 面试题:礼物的最大价值
- 礼物的最大价值
- 矩阵中的最大路径和;礼物的最大价值--剑指offer
- 剑指offer(47):礼物的最大值(动态规划详解,python版)
- LeetCode.64 Minimum Path Sum &amp;amp;&amp;amp; 剑指Offer_47 最大礼物价值 (经典DP问题,***必备题***)
- 最大礼物价值 【二维dp 记忆化搜索】 特别水
- AcWing 60 礼物的最大价值
- 【Java】面试题47:礼物的最大价值
- 剑指offer——滑动窗口的最大值(c++)
- c++实现最大堆维护maxHeapify及运行实例结果
- c++使用动态规划dp(自底向上)重构解决钢条切割输出最大收益和切割方案及运行实例结果
- C++产生随机数,并用冒泡对其排序求最大值
- 剑指offer题解C++【4】重建二叉树
- C++ 中*max_element函数找最大元素 *min_element函数找最小元素 STL算法
- [C++]LeetCode: 133 Largest Rectangle in Histogram(最大矩形面积)
- C/C++ | 30-27 给定字符串A和B,输出A和B中的最大公共子串
- 蓝桥杯-和最大子序列-c++
- 剑指offer第31题:连续子数组的最大和
- 算法设计与分析--求最大子段和问题(蛮力法、分治法、动态规划法) C++实现