大佬们都说简单而我暴力超时的dp题目

64. 最小路径和

 

class Solution {
public:
    // vector<int> allAns;
    // int minPathSum(vector<vector<int>>& grid) {
    //   int ans = 0;
    //   int m = grid.size();
    //   int n = grid[0].size();
    //   goWay(ans, grid, 0 , 0);
    //   return *std::min_element(allAns.begin(), allAns.end());
    // }

    // void goWay(int tempans, vector<vector<int>> grid, int x, int y){
    //   if(x == grid.size()-1 && y == grid[0].size()-1){
    //     tempans+=grid[x][y];
    //     allAns.push_back(tempans);       
    //   }
    //   if(x >= grid.size() || y >= grid[0].size())
    //     return;
    //   tempans += grid[x][y];
    //   goWay(tempans, grid, x+1, y);
    //   goWay(tempans, grid, x, y+1);
    // }

    int minPathSum(vector<vector<int>>& grid) {
        if (grid.size() == 0 || grid[0].size() == 0) {
            return 0;
        }
        int rows = grid.size(), columns = grid[0].size();
        auto dp = vector < vector <int> > (rows, vector <int> (columns));
        dp[0][0] = grid[0][0];
        for (int i = 1; i < rows; i++) {
            dp[i][0] = dp[i - 1][0] + grid[i][0];
        }
        for (int j = 1; j < columns; j++) {
            dp[0][j] = dp[0][j - 1] + grid[0][j];
        }
        for (int i = 1; i < rows; i++) {
            for (int j = 1; j < columns; j++) {
                dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];
            }
        }
        return dp[rows - 1][columns - 1];
    }
};

 

posted @ 2022-02-12 12:23  千寻slimg  阅读(40)  评论(0编辑  收藏  举报