二位动态规划
1 int minPathSum(vector<vector<int>>& grid) { 2 if (grid.size() == 0) 3 return 0; 4 else 5 { 6 vector<vector<int>> res(grid.size(), vector<int>(grid[0].size(), 0)); 7 8 res[0][0] = grid[0][0]; 9 for (int i = 1; i < grid[0].size(); ++i) 10 { 11 res[0][i] = res[0][i - 1] + grid[0][i]; 12 } 13 for (int j = 1; j < grid.size(); ++j) 14 { 15 res[j][0] = res[j - 1][0] + grid[j][0]; 16 } 17 for (int i = 1; i < grid.size(); ++i) 18 { 19 for (int j = 1; j < grid[0].size(); ++j) 20 { 21 res[i][j] = min(res[i - 1][j], res[i][j - 1]) + grid[i][j]; 22 } 23 } 24 return res[grid.size()-1][grid[0].size()-1]; 25 } 26 }
一维动态规划
1 int minPathSum(vector<vector<int>>& grid) { 2 if (grid.size() == 0) 3 return 0; 4 else 5 { 6 vector<int> dp(grid[0].size(), 0); 7 dp[0] = grid[0][0]; 8 for (int i = 1; i < grid[0].size(); ++i) 9 dp[i] = dp[i-1]+grid[0][i]; 10 for (int i = 1; i < grid.size(); ++i) 11 { 12 for (int j = 0; j < grid[0].size(); ++j) 13 { 14 if (j == 0) 15 { 16 dp[j] = dp[j] + grid[i][j]; 17 } 18 else 19 { 20 dp[j] = min(dp[j], dp[j - 1]) + grid[i][j]; 21 } 22 } 23 } 24 return dp[grid[0].size() - 1]; 25 } 26 }