Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time.
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.
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
vector<vector<int> > sum(m, vector<int>(n, grid[0][0]));
for(int i=1; i<grid[0].size(); i++)
{
sum[0][i] = sum[0][i-1] + grid[0][i];
}
for(int j=1; j<grid.size(); j++)
sum[j][0] = sum[j-1][0] + grid[j][0];
for(int i=1; i<grid.size(); i++)
{
for(int j=1; j<grid[0].size(); j++)
{
if(sum[i-1][j]<sum[i][j-1])
{
sum[i][j] = sum[i-1][j] + grid[i][j];
}else
{
sum[i][j] = sum[i][j-1] + grid[i][j];
}
cout<<i<<":"<<j<<":"<<sum[i][j]<<endl;
}
}
return sum[grid.size()-1][grid[0].size()-1];
}
};
本文介绍了一个算法问题:在一个填充了非负数的矩阵中找到从左上角到右下角的路径,使得路径上的数字之和最小。该文详细解释了如何通过动态规划的方法解决这一问题,并给出了一段具体的C++实现代码。
281

被折叠的 条评论
为什么被折叠?



