您的位置:首页 > 其它

64.Minimum Path Sum

2015-08-08 22:55 253 查看
问题:给一个矩阵,求一条从左上角到右下角的路径的和,该路径上的数的和最小。

思路:很典型的动态规划问题。类似于数学归纳法。划分状态:dp[i][j]表示从坐标(i,j)到右下角的最小和。递推式:dp[i][j]=grid[i][j]+min(dp[i+1][j],dp[i][j+1])。注意边界条件即可。

class Solution {

public:

    int minPathSum(vector<vector<int>>& grid) {

        int m=grid.size();

        if(m==0) return 0;

        int n=grid[0].size();

        

        int** dp=new int*[m];

        for(int i=0;i<m;i++){

            dp[i]=new int
;

        }

        //initial

        dp[m-1][n-1]=grid[m-1][n-1];

        for(int i=m-2;i>=0;i--){

            dp[i][n-1]=grid[i][n-1]+dp[i+1][n-1];

        }

        for(int j=n-2;j>=0;j--){

            dp[m-1][j]=grid[m-1][j]+dp[m-1][j+1];

        }

        //dp process

        for(int i=m-2;i>=0;i--){

            for(int j=n-2;j>=0;j--){

                dp[i][j]=grid[i][j]+min(dp[i+1][j],dp[i][j+1]);

            }

        }

        //res

        int res=dp[0][0];

        for(int i=0;i<m;i++){

            delete []dp[i];

        }

        delete []dp;

        return res;

    }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: