class Solution {
public:
int maxValue(vector<vector<int>>& grid) {
for(int i = 1;i < grid.size();i++){
grid[i][0] += grid[i-1][0];
}
for(int j = 1;j<grid[0].size();j++){
grid[0][j] += grid[0][j-1];
}
for(int i = 1;i < grid.size();i++){
for(int j = 1;j<grid[0].size();j++){
grid[i][j] += max(grid[i][j-1],grid[i-1][j]);
}
}
return grid[grid.size()-1][grid[0].size()-1];
}
};
class Solution:
def maxValue(self, grid: List[List[int]]) -> int:
for i in range(1,len(grid)):
grid[i][0] += grid[i-1][0]
for j in range(1,len(grid[0])):
grid[0][j] += grid[0][j-1]
for i in range(1,len(grid)):
for j in range(1,len(grid[0])):
grid[i][j] += max(grid[i][j-1],grid[i-1][j])
return grid[-1][-1]
多开一行一列的空间能够让代码更简洁:
class Solution {
public:
int maxValue(vector<vector<int>>& grid) {
int m = grid.size(),n = grid[0].size();
vector<vector<int>>dp(m+1,vector<int>(n+1));
for(int i = 1;i <= m;i++){
for(int j = 1; j <= n;j++){
//dp[i][j]表示从grid[0][0]到grid[i - 1][j - 1]时的最大价值
dp[i][j] = max(dp[i-1][j],dp[i][j-1])+grid[i-1][j-1];
}
}
return dp[m][n];
}
};