题目:
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.
给一个 m x n 的矩阵,矩阵内都是非负数,找到一个路径从左上到右下使得经过的路径的数字和最小。注意:只能向右或者向下移动。
思路:
动态规划法
设状态为f[i][j] ,表示从起点(0 , 0) 到达( i, j ) 的最小路径和,则状态转移方程为:
f[i][j]=min(f[i-1][j], f[i][j-1])+grid[i][j]
类似 :http://blog.csdn.net/u012243115/article/details/41925421 。
代码:
class Solution {
public:
int minPathSum(vector<vector<int> > &grid)
{
int row = grid.size();
int result = 0;
if(row == 0)
return 0;
int col = grid[0].size();
vector<int> f(col,INT_MAX);//初始化为最大值
f[0] = 0; //f[0]初始化为0
for(int i = 0 ; i < row ; i++)
{
for(int j = 0 ; j < col ; j++)
{
if(j == 0)
f[0] += grid[i][j];
else
f[j] = min(f[j] , f[j-1]) + grid[i][j];
}
}
return f[col-1];
}
};