题目描述:
一看这道题和上一道63题像从一个模板出来的,那它很危险了,我们可以套用上题类似的状态公式,稍作修改就能过了,而且也不用怕它卡,卡的地方都知道了。
思路在注释:
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
//这题怕不是上两题的大哥,蜀国三兄弟
//它还是把dp状态矩阵画好了,搞不好要白给
//和上题那么像我们用一下上题的公式吧
//上题公式:
//dp[i][j] = dp[i-1][j] + dp[i][j-1] if(obstacleGrid[i][j]!=1)
//这题公式:
//dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + grid[i][j];
int n = grid.size();
int m = grid[0].size();
long dp[n+5][m+5];
memset(dp, 0, sizeof(dp));
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(i > 0 && j > 0) dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j];
else if(i > 0 && j == 0) dp[i][j] = dp[i-1][j] + grid[i][j];
else if(i == 0 && j > 0) dp[i][j] = dp[i][j-1] + grid[i][j];
else if(i == 0 && j == 0) dp[i][j] = grid[i][j];
}
}
return dp[n-1][m-1];
}
};