题目地址
解题思路
首先我们思考:当我们处于矩阵中某个常规单元格时,此时该单元格的最大价值profit[i][j]应该怎么计算呢?
我们可以很容易得出:profit[i][j]=max(profit[i-1][j],profit[i][j-1]) + grid[i][j];
即处于当前单元格时的最大价值等于(上面一格和左边一个 中 最大价值的较大值) 加 当前单元格的价值;
当然会有一些特殊情况,比如第一行的单元格,第一列的单元格,这些情况需要单独处理:
具体处理细节在下面的代码中都有体现:
代码实现(C++)
class Solution {
public:
int maxValue(vector<vector<int>>& grid)
{
if(grid.size()==0 || grid[0].size()==0)
{
return 0;
}
int m=grid.size();
int n=grid[0].size();
vector<vector<int>> profit(m,vector<int>(n,0));
for(int i=0;i!=m;i++)
{
for(int j=0;j!=n;j++)
{
if(i==0&&j==0)
{
profit[i][j]=grid[i][j];
}
else if(i==0)
{
profit[i][j]=profit[i][j-1]+grid[i][j];
}
else if(j==0)
{
profit[i][j]=profit[i-1][j]+grid[i][j];
}
else
{
profit[i][j]=max(profit[i-1][j],profit[i][j-1])+grid[i][j];
}
}
}
return profit[m-1][n-1];
}
};