64. 最小路径和
思路:
0、dp[i][j]:表示到达该点的最短路径
1、边界内容初始化(从起点递推过去、或者说是累加)
2、中间内容递推【左边、上边取最小加上自己的值即可】
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
int dp[m+1][n+1];
dp[1][1] = grid[0][0];
/*边界初始化*/
for(int i = 2; i <= m; i++) {
dp[i][1] = dp[i-1][1] + grid[i-1][0];
}
for(int j = 2; j <= n; j++) {
dp[1][j] = dp[1][j-1] + grid[0][j-1];
}
/*中间内容递推*/
for(int i = 2; i <= m; i++) {
for(int j = 2; j <= n; j++) {
/*递推公式*/
dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i-1][j-1];
}
}
return dp[m][n];
}
};