【Leetcode每日一题】 动态规划 - 下降路径最小和(难度⭐⭐)(55)

1. 题目解析

题目链接:931. 下降路径最小和

这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了.

2.算法原理

对于这类路径类问题,通常我们首先需要分析状态表示以及状态转移的过程。特别地,本题涉及的是路径上的最小值累加,因此状态转移方程的设计尤为重要。

  1. 状态表示
    • 我们选择的状态表示方式为:dp[i][j] 代表到达位置 [i, j] 时,所有下降路径中的最小和。这种定义方式有助于我们后续的状态转移和结果求解。
  2. 状态转移方程
    • 对于位置 [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][j]
  3. 初始化
    • 为了简化计算,我们可以在矩阵的上方额外添加一行辅助结点,并将其值初始化为0。这样做的好处在于,当我们计算第一行时,可以直接引用这些辅助结点的值,而无需进行额外的判断。
    • 同时,考虑到状态转移时可能需要访问到 [i, j - 1] 和 [i, j + 1] 这样的位置,我们可能需要在矩阵的两侧也额外添加列,并初始化这些列的值。
    • 通常情况下,这些辅助结点的值需要保证后续填表过程的正确性。在本题中,由于我们关心的是路径上的最小值累加,因此将辅助结点的值初始化为0是合理的。
  4. 填表顺序
    • 根据状态表示和状态转移方程,我们可以确定填表的顺序是从上往下逐行计算。这样做的原因是,在计算当前行的某个位置时,我们只需要依赖上一行的数据,这符合动态规划的自底向上思想。
  5. 返回值
    • 题目要求的是只要到达最后一行即可,因此我们的目标是找到最后一行中的最小值。这可以通过遍历最后一行并比较各个位置的值来实现。
    • 最终返回的是这个最小值,而不是 dp[m][n] 的值,因为 dp[m][n] 只表示到达特定位置 [m, n] 的最小路径和,而题目要求的是到达最后一行任意位置的最小路径和。

3.代码编写

class Solution 
{
public:
    int minFallingPathSum(vector<vector<int>>& matrix) 
    {
        int n = matrix.size();
        vector<vector<int>> dp(n + 1, vector<int>(n + 2, INT_MAX));
        for(int j = 0; j < n + 2; j++) dp[0][j] = 0;
        for(int i = 1; i <= n; i++)
        {
            for(int j = 1; j <= n; j++)
            {
                dp[i][j] = min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i - 1][j + 1])) + matrix[i - 1][j - 1];
            }
        }
        int ret = INT_MAX;
        for(int i = 1; i <= n; i++) ret = min(ret, dp[n][i]);
        return ret;
    }
};

The Last

嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。

觉得有点收获的话,不妨给我点个吧!

如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何安装Windows版VRTE2.1.0开发环境并进行开发

前言&#xff08;Abstract&#xff09; 本文档记录了如何安装Windows版VRTE2.1.0开发环境并进行开发&#xff0c;并且总结了当部署在安装了比较陈旧版本Linux内核&#xff08;如<4.5&#xff09;和库的板子上所遭遇的困难&#xff0c;如S32V234EVB。 Definitions and Abbre…

关于时频分析的一些事-答知乎问(一)

从信号的时频谱图中可以提取什么特征&#xff1f; 基于时频谱图的特征一般包括能量特征、时域和频域拓展特征以及时频内禀特征。 基于时频图的能量特征 基于时频图的特征中&#xff0c;能量特征是最简单的一种&#xff0c;通过分析时频谱图中的能量分布特性而获取信号的时频…

第011问 - 工作/学习老走神,如何提升注意力?(3个步骤提升注意力)

前言 你有没有遇到以下 2 个现象&#xff1a; 注意力被微信消息干扰&#xff1a;早上做好了计划&#xff0c;打算今天开发登录功能&#xff0c;结果一看微信 小A 给我发了一条消息&#xff0c;想都没想就给他回复了&#xff0c;这一回不要紧&#xff0c;他又给我发了&#xff0…

爆火 AI 硬件遭差评,Ai Pin 上市即翻车;Grok 推出首个多模态模型丨 RTE 开发者日报 Vol.184

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

jenkins 启动linux节点时 控制台中文显示问号乱码

新增一个jenkins节点时&#xff0c;遇到了控制台中文输出问号的问题。 网上各种配置jenkins的全局变量&#xff0c;都不行。 最终是 节点列表 ->对应节点 -> 启动方式 -> 高级 添加JVM选项 -Dfile.encodingUTF-8

webots学习记录:R2023b如何导入stl文件

R2023b以及更新的版本的“文件”菜单中已经没有“Import 3D Model”这个选项了&#xff0c;用如下方法导入stl文件&#xff0c;

把数组中的所有空字符串移动到数组的前面

// 假设我们有一个数字数组和一个条件函数 // 条件函数返回true的元素将被移动到数组的前面 let numbers [1, 2, 3, 4, , 6, , 8, 9]; let condition (value) > value ; // 例如&#xff0c;我们想把偶数移动到前面// 使用sort函数实现 numbers.sort((a, b) > {let aS…

GIS GeoJSON数据获取

1、工具地址 DataV.GeoAtlas地理小工具系列 2、界面预览

【C++】unordered_map unordered_set 底层刨析

文章目录 1. 哈希表的改造2. unordered_map3. unordered_set C STL 库中&#xff0c;unordered_map 和 unordered_set 容器的底层为哈希表&#xff0c;本文将简单模拟哈希表&#xff08;哈希桶&#xff09;&#xff0c;unordered_map 和 unordered_set 只需封装哈希表的接口即可…

专业SEO优化指南:设置网站关键词的详细步骤

在网站SEO优化的过程中&#xff0c;关键词的设置是提升网站排名的关键步骤之一。那么&#xff0c;作为一名专业的SEO人员&#xff0c;如何有效地进行关键词设置呢&#xff1f;以下是一些详细的步骤&#xff1a; 1. 确定网站的核心关键词。 这需要深入理解网站的主题或产品。通…

稀碎从零算法笔记Day49-LeetCode:设计哈希集合

题型&#xff1a;模拟 链接&#xff1a;705. 设计哈希集合 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 不使用任何内建的哈希表库设计一个哈希集合&#xff08;HashSet&#xff09;。 实现 MyHashSet 类&#xff1a; void add(key) 向哈…

封装原生html的table处理方法【参数类似eltable】

直接跑html即可 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>封装原生talbe</title> </…

“书写梦想 快乐成长”——沱江社区雏鹰活动(一)

为了丰富社区青少年精神文化生活&#xff0c;发挥社区服务青少年的功能和作用&#xff0c;2024年4月13日上午9点&#xff0c;中共新都区新都街道沱江社区委员会、沱江社区居民委员会联合成都市新都区领航社会工作服务中心举办的“书写梦想 快乐成长”——沱江社区雏鹰活动在沱江…

图灵奖简介及2023年获奖者Avi Wigderson的贡献

No.内容链接1Openlayers 【入门教程】 - 【源代码示例300】 2Leaflet 【入门教程】 - 【源代码图文示例 150】 3Cesium 【入门教程】 - 【源代码图文示例200】 4MapboxGL【入门教程】 - 【源代码图文示例150】 5前端就业宝典 【面试题详细答案 1000】 文章目录 2023年的…

✌粤嵌—2024/3/19—环形链表

代码实现&#xff1a; 快慢指针&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ bool hasCycle(struct ListNode *head) {// 快慢指针&#xff1a;快指针每次走两步&#xff0c;慢指针每次走一步&a…

近屿OJAC带你解读:什么是GAN生成式对抗网络?

生成式对抗网络(GAN&#xff0c;英文全称Generative Adversarial Network)是一种深度学习模型&#xff0c; 由于其生成高质量、真实数据的能力&#xff0c;近年来获得了极大的关注。GAN已被用于广泛的应用 中&#xff0c;包括图像合成、⻛格转移和数据增强。 GAN的核心思想是通…

《springcloud alibaba》 六 微服务链路跟踪skywalking

目录 准备调整配置接入多个微服务网关项目调整order-seata项目stock-seata项目测试 接入网关微服务 skywalking持续化到mysql自定义链路跟踪pom .xmlorderControllerOrderServiceOrderDaoOrderTblMapper.xml测试 性能剖析日志tid打印pom.xmllogback-spring.xml日志收集启动项目…

Unity类银河恶魔城学习记录12-7-2 p129 Craft UI - part 2源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_CraftWindow.cs using UnityEngine.UI; using TMPro; using UnityEngin…

OpenCV轻松入门(七)——HSV颜色模型图像特效案例:判断白天夜晚抠图颜色过滤替换背景图

HSV模型解释 HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。 这个模型中颜色的参数分别是&#xff1a; 色调&#xff08;H&#xff09;饱和度&#xff08;S&#xff09;明度&#xff08;V&…

为什么不用低代码平台制作网站,套用这11个商城主题模板,让程序员解放双手

随着人工智能技术的迅猛发展&#xff0c;众多复杂工作变得愈发简便。二十年前&#xff0c;构建一个在线商城并处理支付交易是一项艰巨任务&#xff0c;而正是在那个时代&#xff0c;零售巨头淘宝和京东崭露头角。如今&#xff0c;我们迎来了新时代&#xff0c;众多高效工具应运…