leetcode64——Minimum Path Sum

题目大意:给出正整数二维数组地图,从左上角开始,只能向右或向下,求走到右下角所经过的路径上的值的最小和

分析:动规。和上两道题类似,dfs超时,所以需要dp来做。

          状态:dp[i][j]——走到map[i][j]的路径值最小和

          初始化:dp[i][0]=dp[i-1][0]+map[i][0];dp[0][j]=dp[0][j-1]+map[0][j]

          结果:dp[m - 1][n - 1]

          状态转移方程:dp[i][j]=map[i][j]+min(dp[i-1][j],dp[i][j-1])

代码:

class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size(), n = grid[0].size();
vector<vector<int>> dp(m, vector<int>(n));
dp[0][0] = grid[0][0];
for (int i = 1;i < m;i++) {
dp[i][0] = dp[i - 1][0] + grid[i][0];
}
for (int j = 1;j < n;j++) {
dp[0][j] = dp[0][j - 1] + grid[0][j];
}
for (int i = 1;i < m;i++) {
for (int j = 1;j < n;j++) {
dp[i][j] = grid[i][j] + min(dp[i - 1][j], dp[i][j - 1]);
}
}
return dp[m - 1][n - 1];
}
};

猜你喜欢

转载自blog.csdn.net/tzyshiwolaogongya/article/details/80204963