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.
int minPathSum(vector< vector<int> >& grid) {
if(grid.empty()){
return 0;
}
int h = grid.size(), w = grid[0].size(), temp;
int arr[h][w];
arr[h - 1][w - 1] = grid[h - 1][w - 1];
for(int i = w - 2; i >= 0; i--){
arr[h - 1][i] = arr[h - 1][i + 1] + grid[h - 1][i];
}
for(int i = h - 2; i >= 0; i--){
arr[i][w - 1] = arr[i + 1][w - 1] + grid[i][w - 1];
}
for(int i = h - 2; i >= 0; i--){
for(int j = w - 2; j >= 0; j--){
temp = arr[i + 1][j] < arr[i][j + 1] ? arr[i + 1][j] : arr[i][j + 1];
arr[i][j] = temp + grid[i][j];
}
}
return arr[0][0];
}