这道题的解法和unipue (path1 http://blog.csdn.net/revoir/article/details/51241360)一模一样。就不多说了。
int minPathSum(vector<vector<int>>& grid) {
if(grid.size()==0) return INT_MAX;
int m=grid.size();
int n=grid[0].size();
vector<int> memo(n,grid[0][0]);
//for(int i=1;i<m;++i) memo[i][0]=memo[i-1][0]+grid[i][0];
for(int j=1;j<n;++j) memo[j]=memo[j-1]+grid[0][j];
for(int i=1;i<m;++i){
memo[0]+=grid[i][0];
for(int j=1;j<n;++j){
memo[j]=grid[i][j]+min(memo[j],memo[j-1]);
}
}
return memo[n-1];
}