边界问题
问题1:状态表示
问题2:状态如何计算
问题3:边界
问题1:状态表示 f(i,j),表示从左上角走到(i,j)这个格子时,我拿到礼物的价值是多少
问题2:状态如何计算 f(i,j)=max{f[i-1,j],f[i,j-1]}+gift[i,j]
其中:gift[i,j]为目标格子的礼物价值;
max{f[i-1,j],f[i,j-1]}为到达目标前的累计礼物最大值
问题3:边界 f[i,0]=f[0,j]=0
答案:f(n,m)
class Solution { public: int getMaxValue(vector<vector<int>>& grid) { int m = grid.size(), n = grid[0].size(); vector<vector<int>> f(m + 1, vector<int>(n + 1));//下标从1开始算,从1开始算,不用处理边界问题。从1开始算,i-1其实是0 // 从1开始可以不用处理边界问题 for(int i = 1; i <= m; i ++){ for(int j = 1; j <= n; j ++){ //因为我们的i,j是从1开始算的,所以进行了i-1,j-1。所以i和j都要往前偏1个 f[i][j] = max(f[i - 1][j] + grid[i - 1][j - 1], f[i][j - 1] + grid[i - 1][j - 1]); } } return f[m][n]; } };