题意
一个n∗m的地图,每个点有一个权值,求从左上角到右下角的最小路径权值和.
思路
经典的DP问题,dp[i][j]表示到达点(i,j)的最小权值和,同样的到达一个点(i,j)只能从点(i−1,j)或者点(i,j−1),那么可以得出dp[i][j]=dp[i][j]+min(dp[i−1][j],dp[i][j−1]).
代码
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
if(m == 0) return 0;
int n = grid[0].size();
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(i == j && i == 0) continue;
if(i == 0){
grid[i][j] += grid[i][j - 1];
} else if(j == 0){
grid[i][j] += grid[i - 1][j];
} else{
grid[i][j] += min(grid[i][j - 1], grid[i - 1][j]);
}
}
}
return grid[m - 1][n - 1];
}
};