Minimum Path Sum
LeetCode上的64题:https://leetcode.com/problems/minimum-path-sum/
题目
对二维m*n数组,求一条从左上到右下的路径,使得路径经过的数字的累计和最小。注意“行走”时只能往下或往右
Example:
Input:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
Output: 7
Explanation: Because the path 1→3→1→1→1 minimizes the sum.
题解
题目作为DP题目很简单,因为分解成子问题的方法很容易看出来。dis[i,j] = min(dis[i-1,j],dis[i][j-1]) + nums[i,j]。基准情况则是dis[i,0] = dis[i-1,0] + nums[i,0], dis[0,j] = dis[0,j-1] + nums[0,j], dis[0,0] = nums[0,0].
代码
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int r = grid.size();
int c = grid[0].size();
for (int i = 1; i < r; i++) {
grid[i][0] += grid[i-1][0];
}
for (int i = 1; i < c; i++) {
grid[0][i] += grid[0][i-1];
}
for (int i = 1; i < r; i++) {
for (int j = 1; j < c; j++) {
grid[i][j] += min(grid[i-1][j], grid[i][j-1]);
}
}
return grid[r-1][c-1];
}
};