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];
}
};