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