熟悉的路径问题
1.状态表示
是什么?dp表中里的值所表示的含义就是状态表示
dp[i][j]表示:到达[i,j]位置时,此时所能拿到礼物的最大价值
2.状态转移方程
dp[i][j] 等于什么
因为可以向下或者向右移动,所以到达dp[i][j]有两种情况
应该取两种情况中价值大的情况 + 这个位置的价值
dp[i][j] = max(dp[i-1][j] + dp[i][j-1]) + g[i][j]
3.初始化
保证填表的时候不越界
和之前的路径问题一样,填一个位置需要上边和左边的值
细节:多加的虚拟节点应该都设置为0,防止干扰正确结果
4.填表顺序
从左上到右下
5.返回值
dp[m][n]
6.代码
class Solution {
public:
int maxValue(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
//1.创建dp表
vector<vector<int>> dp(m+1,vector<int>( n+1));
//2.初始化 vector会默认全部初始化为0
//3.填表
for(int i = 1;i < m+1;i++)
{
for(int j = 1; j < n+1;j++)
{
dp[i][j] = max(dp[i-1][j] , dp[i][j-1]) + grid[i-1][j-1];
}
}
//4.返回值
return dp[m][n];
}
};