动态规划——路径问题:931.下降路径最小和

文章目录

  • 题目描述
  • 算法原理
    • 1.状态表示(经验+题目)
    • 2.状态转移方程
    • 3.初始化
    • 4.填表顺序
    • 5.返回值
  • 代码实现
    • C++
    • Java

题目描述

题目链接:931.下降路径最小和
在这里插入图片描述
关于这⼀类题,看过我之前的博客的朋友对于状态表示以及状态转移是⽐较容易分析出来的。比较难的地方可能就是对于边界条件的处理。

算法原理

1.状态表示(经验+题目)

对于这种路径类的问题,我们的状态表示⼀般有两种形式:

  • 从 [i, j] 位置出发,到达⽬标位置有多少种方式;
  • 从起始位置出发,到达 [i, j] 位置,⼀共有多少种方式。

这⾥选择第⼆种定义状态表示的方式:
dp[i][j] 表示:到达 [i, j] 位置时,所有下降路径中的最小和。

2.状态转移方程

在这里插入图片描述

根据最近的一步划分问题。对于普遍位置 [i, j] ,根据题意得,到达 [i, j] 位置可能有三种情况:

  • 从正上方 [i - 1, j] 位置转移到 [i, j] 位置;
  • 从左上方 [i - 1, j - 1] 位置转移到 [i, j] 位置;
  • 从右上方 [i - 1, j + 1] 位置转移到 [i, j] 位置;

我们要的是三种情况下的最小值,然后再加上矩阵在 [i, j] 位置的值。
所以得出状态转移方程:

dp[i][j] = min(dp[i - 1][j], min(dp[i - 1][j - 1], dp[i - 1][j + 
1])) + matrix[i - 1][j - 1]

3.初始化

在这里插入图片描述

可以在最前面加上⼀个辅助结点,帮助我们初始化。使用这种技巧要注意两个点:

  • 辅助结点里面的值要保证后续填表是正确的
  • 下标的映射关系

在本题中,需要加上一行,并且加上两列。所有的位置都初始化为INT_MAX,然后将第⼀行初始化为 0 即可。

4.填表顺序

根据状态表示,填表的顺序是从上往下即可,同一行的顺序可以随意。

5.返回值

注意这⾥不是返回 dp[m][n] 的值!题⽬要求只要到达最后一行就行了,因此这⾥应该返回 dp 表中最后一行的最小值

代码实现

C++

class Solution {
public:int minFallingPathSum(vector<vector<int>>& matrix) {//1.创建一个dp表int n = matrix.size();vector<vector<int>> dp(n + 1, vector<int>(n + 2, INT_MAX));//2.初始化for(int k = 0;k <= n + 1;++k)dp[0][k] = 0;//3.填表for(int i = 1;i <= n;++i)for(int j = 1;j <= n;++j)dp[i][j] = min(min(dp[i - 1][j - 1], dp[i - 1][j]), dp[i - 1][j + 1]) + matrix[i - 1][j - 1];//这边要注意一下下标的映射关系//4.返回值int ret = INT_MAX;for(int m = 1;m <= n;++m)ret = min(ret, dp[n][m]);return ret;}
};

Java

class Solution {public int minFallingPathSum(int[][] matrix) {// 1. 创建 dp 表// 2. 初始化// 3. 填表// 4. 返回结果int n = matrix.length;int[][] dp = new int[n + 1][n + 2];for (int i = 1; i <= n; i++)dp[i][0] = dp[i][n + 1] = Integer.MAX_VALUE;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)dp[i][j] = Math.min(dp[i - 1][j], Math.min(dp[i - 1][j - 1],dp[i - 1][j + 1])) + matrix[i - 1][j - 1];int ret = Integer.MAX_VALUE;for (int j = 1; j <= n; j++)ret = Math.min(ret, dp[n][j]);return ret;}
}

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

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

相关文章

5分钟了解下HDFS

随着大数据时代的到来&#xff0c;传统的数据存储和管理方式已经无法满足日益增长的数据处理需求。HDFS&#xff08;Hadoop Distributed File System&#xff09;作为Apache Hadoop项目的一部分&#xff0c;以其高度的容错性、可扩展性和高吞吐量&#xff0c;成为了处理大规模数…

抖音APP运用的AI技术拆解

1.推荐系统&#xff08;RS&#xff09; 用户画像&#xff1a;根据用户的信息&#xff08;如地区、性别、年龄、收藏、关注......&#xff09;进行分析&#xff0c;构建用户画像&#xff0c;对用户进行分类&#xff1b; 行为分析&#xff1a;将用户的显形行为数据&#xff08;如…

搜维尔科技:OptiTrack是基于LED墙虚拟制作舞台的最佳选择

OptiTrack因其绝对精度、易用性、可靠性以及与现场工具的完美集成而被选中&#xff0c;仍然是全球首屈一指的基于 LED 墙的虚拟制作舞台的选择。 当今虚拟制作阶段的低延迟、超精确摄像机跟踪标准 /- 0.2 毫米 位置精度1 < 10 毫秒 系统延迟 /- 0.1 度 旋转精度2 电影…

Linux 操作系统网络编程1

目录 1、网络编程 1.1 OSI 网络七层模型 1.1.1 OSI 参考模型 1.1.2 网络数据传输过程 2 传输层通信协议 2.1 TCP 2.1.1 TCP的3次握手过程 2.1.2 TCP四次挥手过程 2.2 UDP 3 网络编程的IP地址 4 端口 5 套接字 1、网络编程 1.1 OSI 网络七层模型 1.1.1 OSI 参考模型…

Linux cmake 初窥【3】

1.开发背景 基于上一篇的基础上&#xff0c;已经实现了多个源文件路径调用&#xff0c;但是没有库的实现 2.开发需求 基于 cmake 的动态库和静态库的调用 3.开发环境 ubuntu 20.04 cmake-3.23.1 4.实现步骤 4.1 准备源码文件 基于上个试验的基础上&#xff0c;增加了动态库…

优思学院|精益六西格玛黑带培训的内容有哪些?【附思维导图】

引言 在现代企业中&#xff0c;精益六西格玛黑带&#xff08;或称六西格玛黑带&#xff09;处于实施六西格玛方法的最前线。然而&#xff0c;他们的职责远不止执行者的角色。黑带既学习六西格玛的工具&#xff0c;又主导项目以改进绩效指标。在更长远的角度看&#xff0c;他们…

擎天科技与禅道合作,打造统一的项目管理平台

统一、全面的项目管理平台能够帮助企业优化管理流程&#xff0c;提升业务效率。擎天集团选择与禅道软件合作&#xff0c;打造统一的项目管理平台&#xff0c;在降低自研软件的研发成本、打破团队信息孤岛、保障数据全面性等方面效果显著&#xff0c;大大提高了团队沟通协作效率…

25852-47-5,MAc-PEG-MAc通常作为高分子材料的交联剂,以提高材料的力学性能和稳定性

【试剂详情】 英文名称 Methacrylate-PEG-Methacrylate&#xff0c;MAc-PEG-MAc 中文名称 甲基丙烯酸酯-聚乙二醇-甲基丙烯酸酯 CAS号 25852-47-5 外观性状 由分子量决定&#xff0c;固体或者液体。 分子量 0.4k&#xff0c;0.6k&#xff0c;1k&#xff0c;2k&#xf…

基于51单片机的温度检测自动调节设计—温度上下限报警自动控制

基于51单片机的温度自动调节 &#xff08;仿真&#xff0b;程序原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.DS18B20检测温度给单片机处理&#xff1b; 2.LCD1602显示实时温度、温度上下限&#xff1b; 3.三个按键可设置温度上下限&#xff1…

【项目】使用Yolov8 + tesseract 实现“营业执照”信息解析(OCR) + 输入可为图片或者pdf + 完整代码 + 整体方案 + 全网首发

本项目可用于毕业设计参考、实验等,营业执照分为横版和竖版,整体检测+识别效果如下所示: 说明:图片来源于网络,如有侵权,请联系作者删除。 目录

【JUC】并发编程 Synchronized 锁升级原理

Synchronized如何实现同步/互斥的效果&#xff1f; monitorenter&#xff1a; 将锁对象对象头中Mark Word的前30bit替换成指向操作系统中与其关联的monitor对象&#xff0c;将锁记录位状态改为10 monitorexit&#xff1a; 将锁对象对象头中Mark Word进行重置&#xff0c;重新恢…

蓝桥杯练习系统(算法训练)ALGO-946 Q神的足球赛

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 足球赛上&#xff0c;只见Q神如闪电般的速度带球时而左&#xff0c;时而右&#xff0c;时而前&#xff0c;时而后&#xff…

第二证券|摘星脱帽行情火爆 超40只ST股候场

5月8日&#xff0c;ST中嘉、*ST明诚强势涨停&#xff0c;2家公司年内均请求吊销危险警示。其间ST中嘉自4月29日以来&#xff0c;已接连录得5个涨停板&#xff1b;*ST明诚自4月23日以来9个交易日录得8个涨停板。 年报季向来是几家欢喜几家愁的时间&#xff0c;有公司披星戴帽&a…

【优选算法】——Leetcode——LCR 179. 查找总价格为目标值的两个商品

1.题目 2. 解法⼀&#xff08;暴⼒解法&#xff0c;会超时&#xff09;&#xff1a; 1.算法思路&#xff1a; 2.图解 3. 代码实现 3. 解法⼆&#xff08;双指针-对撞指针&#xff09;&#xff1a; 1.算法思路&#xff1a; 2.图解 3.代码实现 1.C语言 2…

如何快速学习VCU电控开发

本课程基于实际项目案例和岗位需求技能制定教学大纲&#xff0c;以任务驱动方式引导学员&#xff0c;让学员快速掌握VCU开发知识。首先从VCU开发必备知识点和MATLAB/Simulink软件建模工具的使用入手&#xff0c;夯实学员基础。再通过策略设计、模型搭建和测试标定来指导学员完成…

AI图书推荐:使用FastAPI框架构建AI服务

《使用FastAPI构建生成式AI服务》&#xff08;Building Generative AI Services with FastAPI (Early Release) &#xff09;是一本由Ali Parandeh编写的书籍&#xff0c;计划于2025年3月首次出版&#xff0c;该书以实践为导向&#xff0c;指导读者如何开发具备丰富上下文信息的…

【k8s多集群管理平台开发实践】十二、开发总结及注意事项【完结】

文章目录 简介总结前面11章节所实现的功能&#xff1a; 一.完善集群更多功能1.1.可以扩展更多的功能 二.该系列课程代码地址三.技术栈及开发经验3.1.开发过程中所使用到的一些技术栈 四.开发过程中需要注意的事项五.反馈与交流 简介 该系列文章主要是介绍了多k8s集群平台开发的…

【前端】CSS基础(1)

文章目录 前言一、CSS基础1、 CSS是什么2、 CSS基本语法规范3、 代码风格3.1 样式格式3.2 样式大小写3.3 空格规范 4、 CSS引入方式4.1 内部样式表4.2 行内样式表4.3 外部样式 前言 这篇博客仅仅是对CSS的基本结构进行了一些说明&#xff0c;关于CSS的更多讲解以及HTML、Javasc…

iOS MRC那句话

混编时使用MRC文件需要使用这句话 -fno-objc-arc在下图中显示的位置添加

Pytorch常用的函数(九)torch.gather()用法

Pytorch常用的函数(九)torch.gather()用法 torch.gather() 就是在指定维度上收集value。 torch.gather() 的必填也是最常用的参数有三个&#xff0c;下面引用官方解释&#xff1a; input (Tensor) – the source tensordim (int) – the axis along which to indexindex (Lo…