[LeetCode]Minimum Path Sum

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.

思考:DP方程:dp[i][j]=grid[i][j]+min(dp[i-1][j],dp[i][j-1])。

class Solution {
public:
    int minPathSum(vector<vector<int> > &grid) {
        // IMPORTANT: Please reset any member data you declared, as
        // the same Solution instance will be reused for each test case.
        int m=grid.size();
		int n=grid[0].size();
		int i,j,ret=0;
		int **dp=new int*[m];		
		for(i=0;i<m;i++)
		{
			dp[i]=new int[n];
			memset(dp[i],0,sizeof(int)*n);
		}
		for(i=0;i<m;i++)
		{
			for(j=0;j<n;j++)
			{
				if(i==0&&j==0) dp[i][j]=grid[i][j];
				else if(i==0) dp[i][j]=grid[i][j]+dp[i][j-1];
				else if(j==0) dp[i][j]=grid[i][j]+dp[i-1][j];
				else dp[i][j]=grid[i][j]+min(dp[i-1][j],dp[i][j-1]);
			}
		}
		ret=dp[m-1][n-1];
		for(i=0;i<m;i++)
			delete []dp[i];
		delete []dp;
		return ret;
    }
};

  

原文地址:https://www.cnblogs.com/Rosanna/p/3439235.html