解题思路
dp[i][j]表示走到(i,j)时能获得的最大礼物价值
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
dp[0][0] = grid[0][0];
dp[i][0] = grid[i][0] + dp[i - 1][0];
dp[0][j] = dp[0][j - 1] + grid[0][j];
代码
class Solution {
public:
int maxValue(vector<vector<int>>& grid) {
vector < vector<int>> dp(grid.size(),vector<int>(grid[0].size(),0));
dp[0][0] = grid[0][0];
for (int i=1;i<grid.size();i++)
{
dp[i][0] = grid[i][0] + dp[i - 1][0];
}
for (int j=1;j<grid[0].size();j++)
{
dp[0][j] = dp[0][j - 1] + grid[0][j];
}
for (int i = 1; i < grid.size(); i++)
{
for (int j=1;j<grid[0].size();j++)
{
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
}
}
return dp[grid.size() - 1][grid[0].size() - 1];
}
};