剑指 Offer 47. 礼物的最大价值

发布时间 2023-04-08 22:48:23作者: lxy_cn

题目链接:剑指 Offer 47. 礼物的最大价值

方法:动态规划

解题思路

\(当前位置的最大价值 = max(上方格子的最大价值,左边格子的最大价值) + 当前位置的价值\),即局部最优可以推出全局最优,简单递推即可。

代码

class Solution {
public:
    int maxValue(vector<vector<int>>& grid) {
        int m = grid.size();
        int n = grid[0].size();
        for (int x = 1; x < m; x ++ ) grid[x][0] += grid[x - 1][0];
        for (int y = 1; y < n; y ++ ) grid[0][y] += grid[0][y - 1];
        for (int x = 1; x < m; x ++ )
            for (int y = 1; y < n; y ++ ) 
                grid[x][y] += max(grid[x - 1][y], grid[x][y - 1]);
        return grid[m - 1][n - 1];
    }
};

复杂度分析

时间复杂度:\(O(nm)\)
空间复杂度:\(O(1)\)