剑指offer之礼物的最大值

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

解题思路:
这是一个典型的动态规划题。用dp[i][j]表示在(i,j)位置可以拿到的礼物的最大价值。由于题目要求拿礼物时只能想右或者向下走,因此我们可以知道在(i,j)位置能拿到的礼物的最大值除了与当前位置的礼物的价值相关,还与路径中上一个位置拿到的礼物的价值有关,而上一个位置也就是该位置的上边的格子或者左边的格子,进而可以得到转移方程:
dp[i][j] = max(dp[i-1][j],dp[i][j-1]) + grid[i][j]
再处理一下边界情况。当当前的位置位于矩阵的最左侧的一列或者最上面的一行时,该位置拿到的礼物值就是其左侧或者上面格子能拿到的礼物的值加上该位置礼物的价值。

class Solution {
public:int maxValue(vector<vector<int>>& grid) {if(grid.size() == 0) return 0;int m = grid.size();int n = grid[0].size();vector<vector<int>> dp(m,vector<int>(n,0));for(int i = 0; i < m ; ++i){for(int j = 0 ; j < n ; ++j){if(i==0&&j==0){dp[i][j] = grid[i][j];}else if(i == 0 && j != 0){dp[i][j] = dp[i][j-1] + grid[i][j];}else if( j == 0 && i != 0 ){dp[i][j] = dp[i-1][j] + grid[i][j];}else{dp[i][j] = max(dp[i-1][j],dp[i][j-1]) + grid[i][j];}}}return dp[m-1][n-1];}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么叫日上_古雷150万吨乙烯,为啥叫芒果项目?

古雷150万吨乙烯&#xff0c;为啥叫芒果项目&#xff1f;福建石油化工集团有限责任公司9月1日在福州举行的一场新闻通气会上透露&#xff0c;石化基地引进世界化工巨头——沙特基础工业公司(简称SABIC)&#xff0c;合资合作共建中沙古雷乙烯项目。中沙古雷乙烯项目将在福建古雷…

Linux学习:第四章-vi编辑器

一vi编辑器简介vim全屏幕纯文本编辑器别名alias命令‘命令别名’ aliasvi’vim’ alias lsls --colorttyls正常显示颜色 alias lsls --colornever 环境变量配置文件/root/.bashrc 二vim使用 1vi模式 vi文件名 命令模式 输入模式 末行模式 命令----》输入a&#xff1a;追加i&…

剑指offer之矩阵中的路径

题目描述&#xff1a; 请设计一个函数&#xff0c;用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始&#xff0c;每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格&#xff0c;那么该路径不能再次进入…

gradient设置上下渐变_PaintCode Mac使用教程:如何使用渐变色

Mac平台上一款强大的iOS矢量绘图编程软件PaintCode Mac&#xff0c;无论您是程序员还是设计师&#xff0c;paintcode3能够让你像在PS中画图一样绘制各种UI图形&#xff0c;而且paintcode3会自动帮你生成针对MacOS X或iOS平台Objective-C或C#代码&#xff0c;能够节约大量的编程…

剑指offer之求1+2+...+n

题目描述&#xff1a; 求 12…n &#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句&#xff08;A?B:C&#xff09;。 示例 1&#xff1a; 输入: n 3 输出: 6 示例 2&#xff1a; 输入: n 9 输出: 45 来源&#xff1a;力扣&#xf…

opencv计算图像亮度调节_OpenCV教程创建Trackbar图像对比度、亮度值调整

这篇文章中我们一起学习了如何在OpenCV中用createTrackbar函数创建和使用轨迹条&#xff0c;以及图像对比度、亮度值的动态调整。文章首先详细讲解了OpenCV2.0中的新版创建轨迹条的函数createTrackbar&#xff0c;并给上一个详细注释的示例。然后讲解图像的对比度、亮度值调整的…

TCP与UDP的区别(未完成,待补充)

TCP&#xff1a;Transport Control Protocol UDP&#xff1a;User Data Protocol TCP相较于UDP有更高的可靠性。TCP相较于UDP需要更多的存储空间。因为TCP的头部有20个字节&#xff0c;UDP的头部只有8个字节。UDP相较于TCP有更高的实时性。TCP基于连接&#xff0c;UDP基于不连…

find linux 目录深度_浪里淘沙,详解Linux系统中Find命令的实用技巧

知了小巷&#xff1a;浪里淘沙&#xff0c;详解Linux系统中Find命令的实用技巧。啊哈&#xff0c;找到了&#xff01;当我们需要在Linux系统上定位某个文件或目录时&#xff0c;find命令通常是必备之选。它使用起来非常简单&#xff0c;但有许多不同的可选项&#xff0c;允许我…

剑指offer之从上到下打印二叉树

从上到下打印出二叉树的每个节点&#xff0c;同一层的节点按照从左到右的顺序打印。 例如: 给定二叉树: [3,9,20,null,null,15,7], 返回&#xff1a; [3,9,20,15,7] 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode-cn.com/problem…

小米真蓝牙耳机说明书_小米真无线蓝牙耳机Air2 SE评测:仅需169元,享受随心畅听体验...

继小米真无线蓝牙耳机Air 2、小米真无线蓝牙耳机Air 2S之后&#xff0c;小米公司又于2020年5月19日再次推出了一款售价更为亲民的真无线蓝牙耳机新品——小米真无线蓝牙耳机Air2 SE&#xff0c;该机不仅延续了小米真无线蓝牙耳机Air 2系列的外观设计&#xff0c;支持开盒弹窗、…

引用与指针的区别

虽然指针和引用都可以完成对其他对象的间接访问&#xff0c;但是还是有很多不同之处&#xff1a; 1.本身是否是对象 指针本身就是一个对象&#xff0c;而引用本身不是一个对象。因此允许对指针赋值和拷贝&#xff0c;可以定义对指针的引用&#xff0c;已经指向指针的指针&#…

三点外接圆_故地重游伪切圆——伪外接圆的基本性质

在思考一个有关于伪外接圆的等角线问题时&#xff0c;我回想起伪外接圆的一道小题目&#xff0c;这是2012年罗马尼亚大师杯的第六题&#xff0c;这道题目直接以结论的形式呈现出了伪外接圆的基本性质&#xff0c;是一道入门伪外接圆必做的精巧小题。当然有些读者可能从未见过&q…

C++的const限定符

const限定符总是让人很头疼&#xff0c;下面讲解一下几个比较容易混淆的概念&#xff1a; 对常量的引用&#xff08;常量引用&#xff09;&#xff1a; 一般情况下&#xff0c;引用的类型要与其所引用的对象的类型一致&#xff0c;其中的例外情况就是&#xff0c;当初始化常量…

Linux学习:第五章-Linux用户和用户组管理

一用户管理命令用户信息文件&#xff1a;/etc/passwd aa:x:501:501::/home/aa:/bin/bash 第一列&#xff1a;用户名 第二列&#xff1a;密码标志 第三列&#xff1a;UID用户ID 0管理员 1-499系统用户&#xff08;伪用户&#xff09; 500普通用户 第四列&#xff1a;GID初始组ID…

一点等于多少厘米_马桶知识介绍,你了解马桶多少

我们可能并不了解我们经常运用的马桶&#xff0c;认为马桶便是简简单单的规划&#xff0c;没什么技术含量。其实不然&#xff0c;马桶的规划也包含了不少物理学原理。假如你家里的马桶出现毛病&#xff0c;首先要排查毛病的原因&#xff0c;但是假如不了解马桶结构图那就很难把…

动态内存分配与智能指针

内存分配&#xff1a; 静态存储区&#xff1a; 局部static对象类的static数据成员定义在任何函数之外的变量 栈区&#xff1a; 函数内的非static对象 动态内存分配的方式有&#xff1a; new和delete智能指针&#xff08;shared_ptr、unique_ptr、weak_ptr&#xff09;all…

1151压力变送器型号_日本进口横河EJA530E压力变送器型号解读!

横河EJA变送器对大家来说也许不陌生&#xff0c;但是对于EJA变送器的型号很多人还不是很懂&#xff0c;因为一个全型号代表这很多参数&#xff0c;每一个字母和每一个数字背后都是一个准确的参数&#xff0c;我们在选型的时候要提供必要的参数&#xff0c;更具参数选出合适的型…

plc控制可调节阀流程图_PLC控制的水箱液位控制系统毕业论文

内容介绍原文档由会员 莎士比亚 发布论文标准WORD格式排版40页摘要在人们生活以及工业生产等诸多领域经常涉及到液位和流量的控制问题, 例如居民生活用水的供应, 饮料、食品加工, 溶液过滤, 化工生产等多种行业的生产加工过程, 通常需要使用蓄液池, 蓄液池中的液位需要维持合适…

idea继承后重新方法快捷键_idea 查看类继承关系的快捷键

类似eclipse ctrlt的快捷键,idea中是ctrlH…找到对应的类 查看类关系图…1.在想要查看的类上按 Ctrl H -> Diagrams -> Show Diagrams -> Java Class Diagrams -> Show Implementations -> Ctrl A -> 右击一下 -> Enter .…打开想要查看的接口或者类文件…

怎样在数组末尾添加数据_如何利用C++实现可变长的数组?

应该执行什么功能&#xff1f;假设我们要实现一个将自动扩展的数组类&#xff0c;是否需要实现函数&#xff1f;让我们从下面主要功能使用的功能开始&#xff0c;看看我们需要实现哪些功能。输出结果&#xff1a;0 1 2 3 40 1 2 100 4您需要做什么才能实现上述功能&#xff1f;…