动态规划|【路径问题】礼物的最大价值(LCR 166.珠宝的最高价值)

news2024/11/18 5:32:41

目录

题目

题目解析

思路

1.状态表示

2.状态转移方程

3.初始化

4.填表顺序

5.返回值

代码


题目

LCR 166. 珠宝的最高价值

(现在leetcode上面是这个题)这个题跟下面这个题叙述方式一样,就拿下面这个 题来讲解)

题目描述:

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

示例1:

输入:[[1,3,1],[1,5,1],[4,2,1]]

输出:12

解释:路径1-3-5-2-1可以拿到最多价值的礼物

题目解析

用示例1 来举例:输入[[1,3,1],[1,5,1],[4,2,1]],形成如下的一个3*3的矩阵,我们把这个二维矩阵叫cost矩阵,每个位置都是一个对应价值的礼物,要求我们拿到最多价值的礼物,那就意味着,要走最大的值

题目中说从左上角出发,每次可以向下走或者向右走,那个数值大往哪走,右下角为终点,

思路

1.状态表示

        我们这里以某一个位置为结尾来确定状态表示,又根据题目要求,需要我们确定所走路径的拿到礼物的最大价值,所以状态表示dp[i][j]表示起点走到【i,j】位置,此时拿到礼物的最大价值

2.状态转移方程

        状态表示的经验就是根据最近的一步划分问题,那我们怎么到达【i,j】,第一种要么从左边向右走到【i,j】位置,要么从上边向下走到【i,j】位置

所以dp[i][j]可以有两种方式得来

        a)从左边向右走:也就是从【i,j-1】位置走到【i,j】位置,然后拿到【i,j】位置的礼物价值,如果要起点到【i,j】位置拿到礼物的价值最大(dp[i][j]),就需要起点到【i,j-1】位置拿到礼物的价值最大(dp[i][j-1]),因此dp[i][j]=dp[i][j-1]+cost[i][j]

        b)从上边向下走:同理a,这个方式对应的状态转移方程为dp[i][j]=dp[i-1][j]+cost[i][j]

最后取这两种情况的最大值就行

3.初始化

之前说过,初始化的目的就是为了让填表不越界,我们 首先要分析填哪些位置回越界,因为填表的时候是根据状态转移方程来填表的,状态转移方程

dp[i][j]=dp[i-1][j]+cost[i][j]

dp[i][j]=dp[i][j-1]+cost[i][j]

根据这两个公式计算后用最大的那个值填表,计算是一个位置需要这个位置上面的那个值,和这个位置左边的值,但是第一行没有上面的值,第一列没有左边的值。所以第一行和 第一列需要初始化

之前也讲过,虚拟 结点的初始化,虚拟结点就是在创建dp表的时候多创建一行和多创建一列,然后从【1,1】位置开始填表。

虚拟结点里面的值要确保dp表中填的值的准确性。所以填0是最合适的,相当于里面礼物的的价值为0。

4.填表顺序

从上至下,从左至右

5.返回值

因为多开了一行和一列,所以返回dp[m][n]就行。

代码

int jewelleryValue(int** frame, int frameSize, int* frameColSize) 
{
    //创建dp表
    int dp[1000][1000]={0};
    //初始化这个刚好全是0就不用初始化了
    //行和列
    int m=frameSize;
    int n=frameColSize[0];
    for(int i=1;i<m+1;i++){
        for(int j=1;j<n+1;j++)
        {
            dp[i][j]=frame[i-1][j-1]+((dp[i-1][j]>dp[i][j-1])?dp[i-1][j]:dp[i][j-1]);
        }
    }
    return dp[m][n];
}

空间复杂度:O(mn)

时间复杂度:O(mn)

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

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

相关文章

基于语义解析的KBQA——代码和论文详细分析

根据论文&#xff1a;Semantic Parsing on Freebase from Question-Answer Pairs&#xff0c;分析其代码和步骤&#xff0c;以加强对这一流程的深入理解&#xff0c;重点关注模型的输入、输出和具体方法。 前言 提供阅读本文的前提知识&#xff0c;引用自Semantic Parsing on…

Python利用pandas对数据进行特定排序

更多Python学习内容&#xff1a;ipengtao.com 在数据分析和处理过程中&#xff0c;排序是一项常见而重要的操作。Python中的pandas库提供了丰富的功能&#xff0c;可以方便地对数据进行各种排序操作。本文将详细介绍如何利用pandas对数据进行特定排序&#xff0c;包括基本排序、…

ODOO12设置收发邮件服务器教程

一、设置-技术 二、设置–技术–发件服务器 信息填写完整后&#xff0c;点击‘测试连接’&#xff0c;若提示成功&#xff0c;则发件服务器设置成功。 三、设置–技术–收件服务器 四、设置–参数–系统参数 修改之前的email系统参数&#xff1a; mail.catchall.alias: 收件服…

vivo 在离线混部探索与实践

作者&#xff1a;来自 vivo 互联网服务器团队 本文根据甘青、黄荣杰老师在“2023 vivo开发者大会"现场演讲内容整理而成。 伴随 vivo 互联网业务的高速发展&#xff0c;数据中心的规模不断扩大&#xff0c;成本问题日益突出。在离线混部技术可以在保证服务质量的同时&…

在 Linux 环境下安装 Kibana

目录 一、Kibana 是什么 二、在 Linux 环境下安装 Kibana 1、下载安装包 2、解压 3、修改 Kibana的配置文件 config/kibana.yml 4、启动 5、浏览器登录 Kibana 6、测试查询 一、Kibana 是什么 Kibana 是通向 Elastic 产品集的窗口。 它可以在 Elasticsearch 中对数据进…

postman切换成黑色主题

postman安装以后默认是白色背景&#xff0c;如果想要切换成黑色的&#xff0c;大家可以按照下图箭头指示来操作。 1打开设置 2在Themes页面选择黑色主题

ElasticSearch之Completion Suggester

写在前面 通过completion suggester可以实现如下的效果&#xff1a; 其实就是做的like xxx%这种。通过FST这种数据结构来存储&#xff0c;实现快速的前缀匹配&#xff0c;并且可以将es所有的数据加载到内存中所以速度completion的查询速度非常快。 需要注意&#xff0c;如果…

Docker技术概论(2):Docker环境的搭建

Docker技术概论&#xff08;2&#xff09; Docker环境的搭建 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blo…

贪心算法(算法竞赛、蓝桥杯)--修理牛棚

1、B站视频链接&#xff1a;A27 贪心算法 P1209 [USACO1.3] 修理牛棚_哔哩哔哩_bilibili 题目链接&#xff1a;[USACO1.3] 修理牛棚 Barn Repair - 洛谷 #include <bits/stdc.h> using namespace std; const int N205; int m,s,c,ans; int a[N];//牛的位置标号 int d[N…

C/C++语言文字小游戏(荒岛求生)

游戏背景 玩家在荒岛上&#xff0c;需要寻找食物、水源、避难所等资源来生存。 玩家需要避免危险&#xff0c;如野兽、植物、天气等&#xff0c;否则会失去血量或生命。 玩家可以在荒岛上遇到其他生存者&#xff0c;可以选择合作或对抗。 游戏目标是生存一定时间或找到生存的出…

MySql-多表设计-多对多

目录 多对多 多对多 多对多的关系在开发中属于也比较常见的。比如&#xff1a;学生和老师的关系&#xff0c;一个学生可以有多个授课老师&#xff0c;一个授课老师也可以有多个学生。在比如&#xff1a;学生和课程的关系&#xff0c;一个学生可以选修多门课程&#xff0c;一个…

Linux——haproxy搭建Web群集

一、haproxy概述 HAProxy 提供高可用性、负载均衡以及基于TCP和HTTP的应用代理&#xff0c;支持虚拟主机&#xff0c;它是免费、快速并且可靠的一种负载均衡解决方案。适合处理高负载站点的七层数据请求。类似的代理服务可以屏蔽内部真实服务器&#xff0c;防止内部服务器遭受攻…

Dockerfile(5) - CMD 指令详解

CMD 指定容器默认执行的命令 # exec 形式&#xff0c;推荐 CMD ["executable","param1","param2"] CMD ["可执行命令", "参数1", "参数2"...]# 作为ENTRYPOINT的默认参数 CMD ["param1","param…

iSlide插件2024免费版(包含52 个PPT设计辅助功能,9 大在线资源库,以及超 50 万 专业)

一、功能介绍 iSlide是一款专为PowerPoint设计的插件&#xff0c;它集合了众多设计与效率提升的功能&#xff0c;帮助用户更快速、更美观地制作演示文稿。 主题设计&#xff1a;提供多种设计主题&#xff0c;用户只需一键应用&#xff0c;即可为幻灯片赋予统一的视觉风格。智…

php PhpSpreadsheet 读取日期变数字问题解决

问题描述&#xff1a; 使用PhpSpreadsheet 读取表格数据&#xff0c;日期格式读取后变成数字&#xff0c;如下图&#xff1a; 解决方案&#xff1a; $cell $sheet->getCell(H . $row)->getValue(); $toTimestamp \PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimes…

学习大数据,所必需的java基础(6)

文章目录 集合Set集合介绍HashSet集合的介绍和使用LinkedHashSet的介绍以及使用哈希值哈希值的计算方式HashSet的存储去重的过程 Map集合Map的介绍HashMap的介绍以及使用HashMap的两种遍历方式方式1&#xff1a;获取key&#xff0c;然后再根据key获取value方式2&#xff1a;同时…

STL常见容器(set/multiset)---C++

STL常见容器目录&#xff1a; 7. set/multiset 容器7.1 set/multiset 基本概念7.2 set构造和赋值7.3 set大小和交换7.4 set插入和删除7.5 set查找和统计7.6 set和multiset区别7.6.1 pair对组创建7.6.2 set和multiset区别 7.7 set容器排序7.7.1 内置数据类型7.7.2 自定义数据类型…

React中对表格实现列表的拖拽排序

1. 效果:推拽手柄列 2. 实现: react中我们需要两个包来实现 ‘array-move’‘react-sortable-hoc’Installation Use npm $ npm install react-sortable-hoc --save 引入 import { arrayMoveImmutable } from array-move import { SortableContainer, SortableElement, Sort…

智能汽车软硬件产品CES展示汽车技术新亮点

智能汽车是汽车产业发展的新趋势&#xff0c;是未来汽车发展的必然方向。智能汽车是指搭载了先进的传感器、控制器、执行器等部件&#xff0c;并融合了人工智能、自动驾驶等技术&#xff0c;能够实现部分或完全自动驾驶、智能网联等功能的汽车。 近年来&#xff0c;智能汽车技…

CDN原理探究

来源于百度&#xff1a; https://baike.baidu.com/item/%E5%86%85%E5%AE%B9%E5%88%86%E5%8F%91%E7%BD%91%E7%BB%9C/4034265?frge_ala 通过上图&#xff0c;我们可以了解到&#xff0c;使用了CDN缓存后的网站的访问过程变为&#xff1a; 用户向浏览器提供要访问的域名&#xff…