随笔 - 165,  文章 - 0,  评论 - 4,  阅读 - 18023

题目:

class Solution {
public:
    int maxValue(vector<vector<int>>& grid) {
        if(grid.empty()) return 0;      //要考虑棋盘为空的情况直接返回0
        vector<vector<int>> dp(grid.size(), vector(grid[0].size(), 0));      //定义一个和棋盘同样大小的dp数组,每个位置记录的是,走到该位置时礼物的最大价值。
        dp[0][0] = grid[0][0];      //初始化第一格的最大礼物价值,即第一格的礼物价值
        for(int i=1;i<grid.size();i++) dp[i][0]=dp[i-1][0]+grid[i][0];      //初始化只走第一列的最大价值
        for(int j=1;j<grid[0].size();j++) dp[0][j]=dp[0][j-1]+grid[0][j];      //初始化只走第一行的最大价值
        for(int i=1;i<grid.size();i++){      //因为前面做过的初始化工作,所以从第二行第二列开始遍历
            for(int j=1;j<grid[0].size();j++){
                dp[i][j]=max(dp[i-1][j], dp[i][j-1])+grid[i][j];      //每一个dp状态,要么是从上面来的,要么是从左边来的。这是为什么要初始化第一行和第一列的原因,因为他们没法从上面来或者从左边来
            }                                                         //也就是说,如何初始化dp取决于遍历方向和递推方式
        }
        return dp[grid.size()-1][grid[0].size()-1];      //返回走到右下角时的最大礼物价值
    }
};
posted on   孜孜不倦fly  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示