剑指Offer-47:礼物的最大价值

RK3576 USB3.0 DWC3控制器调试:PHY初始化失败排查指南 DWC3 是 Synopsys 公司推出的 USB3.0/3.1 控制器 IP,支持双角色(DRD)模式,可配置为 Host、Device 或 OTG。 阅读详情

题目:

在一个m*n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或者向下移动一格,知道到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿多少价值的礼物?

链接:

剑指Offer(第2版):P233

思路标签:

  • 算法:递归、动态规划

解答:

1. 利用循环的动态规划实现,使用辅助二维数组
  • 定义f(i,j)表示到达坐标为(i,j)的格子时能拿到的礼物总和的最大值;
  • 有两种路径到达(i,j):(i-1,j)或者(i,j-1);
  • f(i,j) = max(f(i-1,j), f(i,j-1)) + gift[i,j];
  • 使用循环来计算避免重复子问题。
class Solution {
public:
    int getMaxValue_solution(const int* values, int rows, int cols) {
        if (values == nullptr || rows <= 0 || cols <= 0)
            return 0;

        int** maxValues = new int*[rows];
        for (int i = 0; i < rows; ++i)
            maxValues[i] = new int[cols];

        for (int i = 0; i < rows; ++i) {
            for (int j = 0; j < cols; ++j) {
                int left = 0;
                int up = 0;
                if (i > 0)
                    up = maxValues[i - 1][j];
                if (j > 0)
                    left = maxValues[i][j - 1];

                maxValues[i][j] = std::max(left, up) + values[i*cols + j];
            }
        }

        int maxValue = maxValues[rows - 1][cols - 1];

        for (int i = 0; i < rows; ++i)
            delete[] maxValues[i];
        delete[] maxValues;

        return maxValue;
    }
};
2. 优化空间复杂度,使用一维数组
  • 题目中可知,坐标(i,j)的最大礼物价值仅仅取决于坐标为(i-1,j)和(i,j-1)两个格子;
  • 因此第i-2行以上的最大价值没有必要保存下来。
  • 使用一维数组保存:(0,0)…(0,j-1)保存的是(i,0)…(i,j-1)的最大价值;(0,j)…(0,cols-1)保存的是(i-1,j)…(i-1,cols-1)的最大价值。
  • 每次计算新的(i,j)时,使用数组下标j-1和j的最大值加当前礼物值即可。
class Solution {
public:
    int getMaxValue_solution(const int* values, int rows, int cols) {
        if (values == nullptr || rows <= 0 || cols <= 0)
            return 0;

        int* maxValues = new int[cols];
        for (int i = 0; i < rows; ++i) {
            for (int j = 0; j < cols; ++j) {
                int left = 0;
                int up = 0;
                if (i > 0)
                    up = maxValues[j];
                if (j > 0)
                    left = maxValues[j - 1];

                maxValues[j] = std::max(left, up) + values[i*cols + j];
            }
        }

        int maxValue = maxValues[cols - 1];

        delete[] maxValues;

        return maxValue;
    }
};
RockChip Android14 修改LCD背光最大值 在调试LCD屏时时长会出现硬件不匹配,导致电流过大,屏幕发热严重。在不调整硬件的情况下,我们可以通过修改软件,降低LCD背光最大值来实现适配。我们都知道LCD屏背光是靠pwm来控制,一般来说最大值可以设置为255,针对上述问题,我们可以通过软件来降低该值,比如200,100等等。 阅读详情

相关推荐

永磁同步电机功率计算实战:从公式到避坑指南(附Excel计算模板)

本文详细解析永磁同步电机(PMSM)功率计算的实战技巧,涵盖三维参数体系、三相与单相系统差异、动态工况补偿及常见计算陷阱。特别提供Excel计算模板,帮助工程师快速准确完成功率计算,避免工业应用中的常见错误,提升工作效率。

x8y9z0的博客 804

礼物的最大价值题目改动版本(记录思路)

剑指 Offer 47. 礼物的最大价值 题目改动版本 题意: 应该是在在一个 m*n 的棋盘的每一格都有一个值,表示能量(能量值大于 0)。你可以从棋盘的左上角开始走,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的能量的价值,请计算你第一次走最多能拿到多少价值的礼物?然后把你拿过的能量的棋盘的位置上的能量值置为0,然后计算第二次走最多能拿到多少价值的礼物? 解题思路: 这个题目难点的地方在于需要对拿到最大能量的走过的路径需要进行记录处理然后更新能量矩阵,对下面的能量矩阵: [ [

murongjunxiaoxiao的博客 173

CentOS7上装不了最新Chrome?别折腾依赖了,试试这个老版本安装法(附103.0.5060.24 beta下载地址)

本文提供了在CentOS7上安装兼容版Chrome的详细指南,解决了因GLIBC版本限制导致的最新版Chrome无法安装的问题。推荐使用Chrome 103.0.5060.24 beta版本,并附有下载地址和完整安装步骤,包括禁用自动更新和配套工具安装,确保系统稳定性和功能完整性。

weixin_29289821的博客 569

算法---礼物的最大值

package niukewang; public class GetMaxValue { public static int getMaxValue(int[][]a){ int max = 0; int i = a.length; int j = a[0].length; max = sum(a,i-1,j-1); return max; } publ...

tangyuan_sibal的博客 868

数据结构实验1.2—高精度计算PI值(西工大)

这是数据结构第二题的题目,是让我们根据用户的需求来计算派的值 这是题目的详细描述,刚看到这道题的时候,我是真的头大,完全没有思路,于是查找了一些大佬的笔记后才开始编写 这是我在写这些代码是所运用到的数学反三角函数幂次展开式的知识。 下面是正确的代码以及我的一些见解,和需要注意的一些地方。希望能对你有所帮助。如有更加精简的算法,请在评论区留下你的算法!!!谢谢!!! #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdl

abcdef0623的博客 5831

TC3xx芯片中断配置避坑指南:从AUTOSAR Davinci配置到SRN地址计算的完整流程

本文详细解析了英飞凌TC3xx芯片的中断配置流程,从AUTOSAR Davinci工具链到硬件调试的全链路指南。重点介绍了中断路由(IR)模块、服务请求节点(SRN)和中断控制单元(ICU)的配置技巧,帮助开发者避开常见陷阱,优化中断性能。

weixin_30628801的博客 413

动态规划dp —— 07.礼物的最大价值

07.礼物的最大价值

a_zhee1的博客 219

Ubuntu22.04+Docker一键部署Autoware Universe避坑指南(附鱼香ROS配置)

本文详细介绍了在Ubuntu22.04系统中使用Docker一键部署Autoware Universe的完整流程,包括鱼香ROS工具链配置、Docker环境优化及VSCode开发环境集成。通过实战指南帮助开发者快速搭建自动驾驶开发环境,解决常见部署问题,提升开发效率。

weixin_29254673的博客 414

(动态规划) 剑指 Offer 47. 礼物的最大价值 ——【Leetcode每日一题】

剑指 Offer 47. 礼物的最大价值 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?

weixin_43412762的博客 783

VsCode安装和配置c/c++环境(超完整,小白专用)

1. vsCode配置C/C++环境 1. vsCode下载和安装 1. 下载Microsoft vsCode [vsCode在这里插入图片描述官网下载: https://code.visualstudio.com/ 2. 安装vsCode 3. 下载中文插件 我这边已经下载过,刚卸载但是没有重启编译器,所以界面显示了中文 2. MinGW编译器下载和配置 1. 下载MinGW 在线安装——下载MinGW-W64-install.exe(速度慢) 下载压缩包——×86_64-posix-

黄化的多多 60万+

GEE土地分类:一文读懂精度评定—混淆矩阵confusion matrix、整体精度OA、用户者精度、生产者精度、kappa系数和F1score系数含案例

本文介绍了如何在 Google Earth Engine (GEE) 中构建和分析混淆矩阵,以评估分类模型的性能。首先,通过 ee.Array 构建混淆矩阵,并展示了如何指定自定义类标签。接着,计算了多种性能指标,包括准确率、Kappa 值、F1-score、消费者准确率和生产者准确率。此外,还演示了如何计算不同类别的 F1-score。最后,通过一个实际案例,展示了如何利用 GEE 进行土地分类,并评估分类器的性能,包括训练和验证样本的准确率、Kappa 值等指标。这些步骤帮助用户理解模型的优缺点,并进行

此星光明博客 442

面试题47-礼物的最大价值

题目 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 解题思路 这是一个典型的能用动态规划解决的问题。我们先用递归的思路来分析。我们先定义第一个函数f(i,j)表示到达坐标为(i,j)的格子时能拿到的礼物总和的最大值。根据题目要求,我们有两种途径到达坐标为(i,j)的格子:通过格子(i-1,j)或者(i,j-1

weixin_42127177的博客 1103

一次把 PRIV mode 讲透:从 ABAP 内存分配链路到定位与治理

ABAP系统进入PRIV模式的本质是Extended Memory耗尽时转向Heap内存的应急机制。该现象会导致工作进程被独占,系统吞吐量下降。触发条件包括系统EM资源池耗尽或单个用户超过配额阈值。关键参数em/address_space_MB和ztta/roll_extension需协同调整。典型症状包括SM50显示PRIV状态、响应延迟和内存dump。治理需双管齐下:系统侧合理配置内存参数,代码侧优化内存使用模式,如分页处理、减少大内表操作和下推聚合逻辑。PRIV模式应作为异常信号而非常态目标,健康系统

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 200

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

剑指 Offer 47. 礼物的最大价值 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 解题思路: 1. 从第一个点到最后一个点依次计算每个格子 的最大值; 2. 每个格子的最大值 为 上面一个点或者下面一个点的最大值与当前点的和; 3. 注意边界条件: 第一行和第一列; /** * @p.

独碟的博客 213

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

LeetCode: 剑指 Offer 47. 礼物的最大价值 dp 题 class Solution { public int maxValue(int[][] grid) { if(grid == null) return 0; int m = grid.length, n = grid[0].length; int[][] dp = new int[m][n]; dp[0][0] = grid[0][0];

lankerens 259

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

动态规划之剑指 Offer 47. 礼物的最大价值

动态规划解决剑指 offer 经典题目礼物的最大价值. 详细的解题步骤, 新手友好讲解, 你也能看懂动态规划 !

这个人很懒, 什么都没留下(这是我写的) 418

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

[[EVD]] - 剑指 Offer 47. 礼物的最大价值

题目分析:[[EVD]] - 剑指 Offer 47. 礼物的最大价值https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof/ 简单描述: 棋盘左上角向右下角移动,求拿到的最大价值礼物 限制🚫 0 < grid.length <= 200 0 < grid[0].length <= 200 两个方向,向右向下 grid[i][j] >0 示例: 输入: [ [1,3,1], [1,5,...

風的博客 567

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

剑指 Offer 47.礼物的最大价值 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例1: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 12 解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物 限制: 0 < grid.length <= 200

僵尸PiKaPi的博客 130

LeetCode刷题-剑指 Offer 47. 礼物的最大价值

难度:中等⭐️⭐️⭐️⭐️。

快乐的小小程序猿 438

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

剑指 Offer 47. 礼物的最大价值题目链接思路分析解题代码 题目链接 剑指 Offer 47. 礼物的最大价值 思路分析 这道题目读到题目中的最大价值就应该联想到可能需要使用动态规划来对该问题进行求解 由于我们拿礼物的方向只能是向右或者向下,所以每一格都面临着两种选择,要么选择向右,要么选择向下,我们自然是要选择这两者中较大的一个,详细解释写在代码的注释里面 解题代码 class Solution { public: int maxValue(vector<vector<in

qq_36711295的博客 304

[算法练习及思路-leetcode剑指offer(Java解法)]No47.礼物的最大价值

题号:剑指 Offer 47 题目名:礼物的最大价值 原题URL:https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof/ 题目描述 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 示例 1: 输入: [ [1,3,1], [1,

叶落雨飘的博客 209

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

在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物。剑指 Offer 47. 礼物的最大价值。......

qq_56352553的博客 186

C++:剑指Offer第二版47题:礼物的最大价值

C++:剑指Offer第二版47题:礼物的最大价值原题链接地址题目原文题解:动态规划 原题链接地址 传送门:https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof/ 题目原文 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 示例 1: 输入: [

weixin_42329812的博客 251

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

题目来源于 LeetCode 的剑指 Offer 47题,难度为:中等。目前的通过率是68.8%。   在一个m*n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?   首先像这种求最值的问题,一般都是往动态规划上面去靠。但是即使知道使用动态规划,但是定义dp的状态表达的意义也是一件不容易的事情,不过我们可以多看多...

Python+大数据+数据分析+自动化+Vue组件开发 248
上一篇: 剑指Offer-46:把数字翻译成字符串
下一篇: 剑指Offer-48:最长不含重复字符的子字符串
大树先生的博客
博客等级 码龄9年 2692粉丝 200原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值