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,f[i][j] = min(f[i-1][j], f[i][j-1]) + a[i][j]

 

 1 class Solution {
 2 public:
 3     int minPathSum(vector<vector<int> > &grid) {
 4         if(grid.size() == 0 || grid[0].size() == 0){
 5             return 0;
 6         }
 7         
 8         int m = grid.size();
 9         int n = grid[0].size();
10         
11         int** dp = new int*[m];
12         for(int i = 0; i < m; i++){
13             dp[i] = new int[n];
14         }
15         
16         dp[0][0] = grid[0][0];
17         
18         for(int i = 1; i < m; i++){
19             dp[i][0] = dp[i-1][0] + grid[i][0];
20         }
21         
22         for(int i = 1; i < n; i++){
23             dp[0][i] = dp[0][i-1] + grid[0][i];
24         }
25         
26         for(int i = 1; i < m; i++){
27             for(int j = 1; j < n; j++){
28                 dp[i][j] = (dp[i-1][j] < dp[i][j-1] ? dp[i-1][j] : dp[i][j-1]) + grid[i][j];
29             }
30         }
31         
32         return dp[m-1][n-1];
33     }
34 };

 

posted on 2015-04-27 16:47  黄瓜小肥皂  阅读(115)  评论(0编辑  收藏  举报