原题:
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.
动态规划。。。。这个题跟这个题一样。。。有一点区别就是返回一个最小值。就是需要定义一个大点的数组 Uniques Paths
构造递归式:result[x][y] = miniOfGrid(x+1 , y , m , n , grid ,result )>miniOfGrid(x , y+1 , m , n , grid , result)?miniOfGrid(x , y+1 , m , n , grid , result)+grid[x][y]:miniOfGrid(x+1 , y , m , n , grid ,result )+grid[x][y];
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 result[m][1000];
for (int i =0 ;i< m;i++){
for (int j= 0;j<n;j++){
result[i][j] = -1;
}
}
return miniOfGrid(0,0,m-1,n-1,grid, result);
}
int miniOfGrid(int x , int y , int m , int n , vector<vector<int> > &grid , int result[][1000]){
if(result[x][y]>=0) return result[x][y];
if(x!=m && y!=n){
int horital = miniOfGrid(x+1 , y , m , n , grid ,result );
int vertical = miniOfGrid(x , y+1 , m , n , grid , result);
result[x][y] = horital>vertical?vertical+grid[x][y]:horital+grid[x][y];
}
else if(x==m && y==n){
result[x][y] = grid[x][y];
}
else if(x!=m){
result[x][y] = miniOfGrid(x+1,y,m,n,grid,result) +grid[x][y] ;
}
else{
result[x][y] = miniOfGrid(x,y+1,m,n,grid,result) +grid[x][y];
}
return result[x][y];
}
};