[LeetCode] Minimum Path Sum
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.
Array Dynamic Programming
找矩阵左上到右下的最短路径,标准的动态规划。
- 初始化统计矩阵的最上行,最右列。
- 从上往下,从左到右填写每格。
- 输出结果
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 6 class Solution { 7 public: 8 int minPathSum(vector<vector<int> > &grid) { 9 int nrow = grid.size(); 10 if(nrow==0) return 0; 11 int ncol = grid[0].size(); 12 vector<vector<int> > cnt(nrow,vector<int>(ncol,0)); 13 cnt[0][0] = grid[0][0]; 14 for(int i =1;i<nrow;i++) 15 cnt[i][0]=cnt[i-1][0]+grid[i][0]; 16 for(int j = 1;j<ncol;j++) 17 cnt[0][j]=cnt[0][j-1] + grid[0][j]; 18 for(int i=1;i<nrow;i++){ 19 for(int j=1;j<ncol;j++){ 20 cnt[i][j] = grid[i][j] + min(cnt[i-1][j],cnt[i][j-1]); 21 } 22 } 23 return cnt[nrow-1][ncol-1]; 24 } 25 }; 26 27 int main() 28 { 29 vector<vector<int> > grid({{1,2,3},{4,5,6},{7,8,9}}); 30 Solution sol; 31 cout<<sol.minPathSum(grid)<<endl; 32 for(int i=0;i<grid.size();i++){ 33 for(int j=0;j<grid[i].size();j++) 34 cout<<grid[i][j]<<" "; 35 cout<<endl; 36 } 37 return 0; 38 }