Minimum Path Sum

来源:互联网 发布:linux awk 编辑:程序博客网 时间:2024/06/08 02:31

问题描述:

给定一个充满非负数的m x n网格,从左上到右下找到一条路径,使路径的所有数的总和最小。

解题思路:

和上一题类似,也是考虑从(0,0)到(i,j)的最后一步。无非有两种可能,向下或者向右。所以我们可以分别计算出这两种情况的数值总和,并将较小的数值赋给dp[i][j]。状态转移方程:dp[i][j]=min(dp[i-1][j]+grid[i][j],dp[i][j-1]+grid[i][j]);

源代码如下:

class Solution {

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