1 /*
 2  * @Author: yaodaoteng
 3  * @Date: 2020-11-27 14:03:37
 4  * @LastEditors: yaodaoteng
 5  * @LastEditTime: 2020-11-27 14:10:53
 6  * @FilePath: \git\leetcode\64.最小路径和.cpp
 7  */
 8 /*
 9  * @lc app=leetcode.cn id=64 lang=cpp
10  *
11  * [64] 最小路径和
12  */
13 
14 // @lc code=start
15 class Solution {
16 public:
17 
18 //简单dp,思路和63差不多
19     int minPathSum(vector<vector<int>>& grid) {
20         int m = grid.size();
21         int n = grid[0].size();//求列数
22         if(m==1&&n==1)
23             return grid[0][0];
24         vector<vector<int>> dp(m, vector<int>(n, 0));  //二维数组初始化
25         dp[0][0] = grid[0][0];
26         for (int i = 1; i < m;i++)
27             dp[i][0] = dp[i - 1][0] + grid[i][0];
28         for (int j = 1; j < n;j++)
29             dp[0][j] = dp[0][j - 1] + grid[0][j];
30 
31         for (int i = 1; i < m;i++){
32             for (int j = 1; j < n;j++){
33                 dp[i][j] = grid[i][j] + min(dp[i - 1][j], dp[i][j - 1]);
34             }
35         }
36         return dp[m - 1][n - 1];
37     }
38 };
39 // @lc code=end