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

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



题目

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表的时候多创建一行和多创建一列,然后从【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)

相关文章
|
3月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
本文整理自阿里云的高级技术专家、Apache Flink PMC 成员李麟老师在 Flink Forward Asia 2025 新加坡[1]站 —— 实时 AI 专场中的分享。将带来关于 Flink 2.1 版本中 SQL 在实时数据处理和 AI 方面进展的话题。
272 0
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
|
3月前
|
存储 数据库
RAG分块技术全景图:5大策略解剖与千万级生产环境验证
本文深入解析RAG系统中的五大文本分块策略,包括固定尺寸、语义、递归、结构和LLM分块,探讨其工程实现与优化方案,帮助提升知识检索精度与LLM生成效果。
496 1
|
10月前
|
传感器 人工智能 监控
AI与物联网的融合:开启智能化未来的新篇章
AI与物联网的融合:开启智能化未来的新篇章
1588 96
|
9月前
|
存储 供应链 安全
区块链在物流管理中的应用:让货物管理变得更智能
区块链在物流管理中的应用:让货物管理变得更智能
1004 15
|
机器学习/深度学习
【LLM提示技术:零样本提示、少样本提示】
本文介绍了零样本和少样本提示技术在大型语言模型中的应用。零样本提示指模型无需示例即可完成任务,而少样本提示则通过提供少量示例提升模型的表现。文中详细探讨了这两种技术的特点与限制,并通过具体示例说明了其在不同任务中的效果。研究表明,指令调整和人类反馈可增强模型性能,而对于复杂任务,则需更高级的提示工程,如思维链提示。
1733 0
【LLM提示技术:零样本提示、少样本提示】
|
人工智能 弹性计算 自动驾驶
2023 AI开发者生态报告:技术生态、开发范式与应用案例全景
随着人工智能技术的飞速发展,全球IT市场对AI的投入持续增长,预计到2027年将达到4236亿美元。
|
运维 监控 物联网
物联网卡:物联网卡网络不稳定的解决办法
物联网卡(IoT SIM卡)网络不稳定的问题可能由多种因素引起,包括网络覆盖、SIM卡状态、设备配置、服务提供商的网络问题以及数据使用量限制等。以下是一些解决物联网卡网络不稳定的操作建议:
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Spin Box的使用及说明
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Spin Box的使用及说明
965 0
|
存储 安全 网络安全
服务器设置了端口映射之后外网还是访问不了服务器
服务器设置了端口映射之后外网还是访问不了服务器
|
Dubbo 关系型数据库 MySQL
nacos常见问题之配置环境变量
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
1482 6