【动态规划】08路径问题_下降路径最小和_C++(medium)

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


目录

题目解析:

算法原理

1.状态表示

2.状态转移方程

3.初始化

4.填表顺序

5.返回值

编写代码


题目解析:

题目让我们求通过 matrix 的下降路径  最小和 

由题可得:

在下一行选择的元素和当前行所选元素最多相隔一列

(即位于正下方或者沿对角线向左或者向右的第一个元素)

如图:

我们用示例一分析:

当我们从数字1开始走的时,此时有如上图几种走法;

其他数字也是同理

我们这里只要下降路径 的 最小和,

所以这里我们这里可以得到这两条下降路径和最短:


算法原理:

1.状态表示

先创建一个dp表

首先先思考dp表里面的值所表示的含义(是什么?)

dp[i][j]表示到达[i][j]位置的下降路径的最小和。

这种状态表示怎么来的?

1.经验+题目要求

用之前或者之后的状态,推导出dp[i][j]的值;

根据最近的最近的一步,来划分问题

经验:以[i][j]位置为结尾,用之前的状态推导出dp[i][j]的值

题目要求:求下降路径  最小和

2.状态转移方程

dp[i][j]等于什么?

根据最近的最近的一步,来划分问题

如图,求[i][j]位置的下降路径最小和时,分为三种情况:

第一种:[i-1][j-1]位置加上[i][j]位置的值

我们此时只要用到达[i-1][j-1]位置的下降路径的最小和,再加上[i][j]位置的值(matrix[i][j])就可以得到下降路径最小和。

而这里的“到达[i-1][j-1]位置的下降路径的最小和”正好是我们的状态表示dp[i-1][j-1];

即:dp[i]=dp[i-1][j-1]+matrix[i][j]

第二种:[i-1][j]位置加上[i][j]位置的值

我们此时只要用到达[i-1][j]位置的下降路径的最小和,再加上[i][j]位置的值(matrix[i][j])就可以得到下降路径最小和。

而这里的“到达[i-1][j]位置的下降路径的最小和”正好是我们的状态表示dp[i-1][j];

即:dp[i]=dp[i-1][j]+matrix[i][j]

第三种:[i-1][j+1]位置加上[i][j]位置的值

我们此时只要用到达[i-1][j+1]位置的下降路径的最小和,再加上[i][j]位置的值(matrix[i][j])就可以得到下降路径最小和。

而这里的“到达[i-1][j+1]位置的下降路径的最小和”正好是我们的状态表示dp[i-1][j+1];

即:dp[i]=dp[i-1][j+1]+matrix[i][j]

总结以上三种情况:

因为我们这里要取下降路径的最小和

所以状态转移方程应该为:

dp[i][j]=min({(int)dp[i-1][j-1],dp[i-1][j],dp[i-1][j+1]})+matrix[i-1][j-1];

3.初始化

(保证填表的时候不越界)

在0行0列和n列的时候越界,所以我们这里可以在m*n的外围多加1行2列,如图:

还有一个问题是:

我们要拿新增用来初始化的行和列要初始化为几呢?

这里我们需要注意的一点就是在dp[1][1]的时候,最小的下降路径就是他本身

根据状态转移方程,如下图三个位置会影响他的值

为了能够取到他本身,

我们这里需要把这三个位置的其中一个初始化为0,其他的位置初始化为INT_MAX(无穷大)

4.填表顺序

(为了填写当前状态的时候,所需要的状态已经计算过了)

这里所需要的状态是:dp[i-1][j-1],dp[i-1][j],dp[i-1][j+1]

所以应该从上到下,从左到右填表

5.返回值

(根据题目要求和状态表示)

综上分析:

返回值为:最后一行的最小值


编写代码:

class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& matrix) {
    //1.创建dp表
    //2.初始化
    //3.填表
    //4.返回结果

        int n=matrix.size();
        vector<vector<int>> dp(n+1,vector<int>(n+2,INT_MAX));
        for(int i=0;i<n+2;i++)
            dp[0][i]=0;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                dp[i][j]=min({(int)dp[i-1][j-1],dp[i-1][j],dp[i-1][j+1]})+matrix[i-1][j-1];

        int tmp=INT_MAX;
        for(int i=0;i<=n;i++)
        {
            tmp=min(tmp,dp[n][i]);
        }

        return tmp;    
    }
};

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

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

相关文章

纸白银投资开户有什么条件?

在金融市场中&#xff0c;白银作为一种重要的贵金属&#xff0c;一直以来都备受投资者的关注。而纸白银&#xff0c;作为白银投资的一种形式&#xff0c;更是因其交易灵活、风险相对较小的特点&#xff0c;吸引了大量的投资者。那么&#xff0c;纸白银投资开户有什么条件呢&…

国产Apple Find My认证芯片哪里找,伦茨科技ST17H6x芯片可以帮到您

深圳市伦茨科技有限公司&#xff08;以下简称“伦茨科技”&#xff09;发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家&#xff0c;该平台提供可通过Apple Find My认证的Apple查找&#xff08;Find My&#xff09;功能集成解决方案。…

从 MySQL 到 DolphinDB,Debezium + Kafka 数据同步实战

Debezium 是一个开源的分布式平台&#xff0c;用于实时捕获和发布数据库更改事件。它可以将关系型数据库&#xff08;如 MySQL、PostgreSQL、Oracle 等&#xff09;的变更事件转化为可观察的流数据&#xff0c;以供其他应用程序实时消费和处理。本文中我们将采用 Debezium 与 K…

VBA之Word应用:利用代码统计文档中的书签个数

《VBA之Word应用》&#xff08;版权10178982&#xff09;&#xff0c;是我推出第八套教程&#xff0c;教程是专门讲解VBA在Word中的应用&#xff0c;围绕“面向对象编程”讲解&#xff0c;首先让大家认识Word中VBA的对象&#xff0c;以及对象的属性、方法&#xff0c;然后通过实…

Jenkins+Docker+Gitee搭建自动化部署平台

目录 服务器准备 Docker安装 yum 包更新到最新 设置yum源 安装docker 启动和开机启动 验证安装是否成功 Jenkins安装 拉取镜像 创建映射目录 运行镜像 运行出错 修正权限 重新运行镜像 新建安全组&#xff0c;放通8080端口 激活Jenkins Jenkins插件 Jenkins全…

GitHub 如何修改 Fork from

如果你的仓库上面是 Fork from 的话&#xff0c;我们有什么办法能够取消掉这个 Fork from&#xff1f; 解决办法 GitHub 上面没有让你取消掉 Fork 的办法。 如果进入设置&#xff0c;在可见设置中也没有办法修改仓库的可见设置选项。 唯一的解决办法就是对你需要修改的仓库先…

景区气象站:旅游体验的新升级

随着科技的发展和人们生活水平的提高&#xff0c;越来越多的人选择在节假日或周末外出旅游&#xff0c;感受大自然的美好。然而&#xff0c;在享受大自然的同时&#xff0c;天气因素成为了影响旅游体验的关键因素之一。为了更好地服务游客&#xff0c;许多景区开始引入气象站&a…

Java 基础学习(十四)Map集合与Set集合

1 Map集合 1.1 Map接口 1.1.1 Map接口概述 Map接口是一种双列集合。Map的每个元素都包含一个键对象Key和一个值对象Value &#xff0c;键对象和值对象之间存在对应关系&#xff0c;这种关系称为映射&#xff08;Mapping&#xff09;。 Map接口中的元素&#xff0c;可以通过…

持续集成交付CICD:K8S 通过模板文件自动化完成前端项目应用发布

目录 一、实验 1.环境 2.GitLab 更新deployment文件 3.GitLab更新共享库前端项目CI与CD流水线 4.K8S查看前端项目版本 5.Jenkins 构建前端项目 6.Jenkins 再次构建前端项目 二、问题 1. Jenkins 构建CI 流水线报错 2. Jenkins 构建CI 流水线弹出脚本报错 3. Jenkins…

微软官宣放出一个「小模型」,仅2.7B参数,击败Llama2和Gemini Nano 2

就在前一阵谷歌深夜炸弹直接对标 GPT-4 放出 Gemini 之后&#xff0c;微软这两天也紧锣密鼓进行了一系列动作。尽管时间日趋圣诞假期&#xff0c;但是两家巨头硬碰硬的军备竞赛丝毫没有停止的意思。 就在昨日&#xff0c;微软官宣放出一个“小模型” Phi-2&#xff0c;这个 Ph…

构建智慧储能物联网,4G工业路由器远程监测在线管理

物联网技术的发展为智慧储能管理带来了革命性的变化。其中&#xff0c;4G工业路由器IR5000通过丰富的连接能力如串口RS485/232或网口的方式&#xff0c;实现了与储能现场各设备的连接&#xff0c;包括电表、电能检测器、防孤岛装置、BMS电池管理系统、监控服务器、储能控制器、…

K8s攻击案例:RBAC配置不当导致集群接管

01、概述 Service Account本质是服务账号&#xff0c;是Pod连接K8s集群的凭证。在默认情况下&#xff0c;系统会为创建的Pod提供一个默认的Service Account&#xff0c;用户也可以自定义Service Account&#xff0c;与Service Account关联的凭证会自动挂载到Pod的文件系统中。 …

JNDI注入Log4jFastJson白盒审计不回显处理

目录 0x00 前言 0x01 Maven 仓库及配置 0x02 JNDI 注入简介 0x03 Java-第三方组件-Log4J&JNDI 0x04 Java-第三方组件-FastJson&反射 0x05 白盒审计 - FastJson 0x06 白盒审计 - Log4j 0x07 不回显的处理方法 0x00 前言 希望和各位大佬一起学习&#xff0c;如果…

ubuntu推送本地仓库到coding

本教程提供在ubuntu系统下推送本地仓库到coding的指令&#xff0c;用于查阅 一、主要步骤有&#xff1a; 0.初始化仓库 git init 1.添加远程仓库 git remote add origin https://coding.git #修改自己仓库链接 &#xff08;命名仓库别名为origin&#xff09; 2.提交代码…

金融CRM有用吗?金融行业CRM有哪些功能

市场形式波诡云谲&#xff0c;金融行业也面临着资源体系分散、竞争力后继不足、未知风险无法规避等问题。金融企业该如何解决这些问题&#xff0c;或许可以了解一下CRM管理系统&#xff0c;和其提供的金融行业CRM解决方案。 金融行业是银行业、保险业、信托业、证券业和租赁业…

lv12 linux 内核移植 10

目录 1 内核概述 1.1 内核与操作系统 1.2 Linux层次结构 1.3 Linux内核特点 2 Linux内核源码结构 2.1 Linux内核源码获取 2.2 源码结构 3 Linux内核移植 3.1 在 Linux 官网下载 Linux 内核源码&#xff08;这里我们下载 linux-3.14.tar.xz&#xff09; 3.2 拷贝内核源…

centos开机自启动实战小案例

1.编写一个我们需要做事的脚本 #!/bin/bash # 打印 "Hello" echo "Hello,Mr.Phor" # 为了更好的能看到效果 我们把这段文本放置到一个文件中 如果重启能够看到 /a.txt文件 我们实验成功 echo "hahahahahahahaha" > /a.txt #每次开机 执行…

Windows/Linux双系统安装(双系统独立分盘)

一、固态硬盘、机械硬盘及U盘概述 &#xff08;一&#xff09;机械硬盘[1][3] 硬盘驱动器&#xff08;Hard Disk Drive&#xff0c;HDD&#xff09;&#xff0c;又称“机械硬盘”或“传统硬盘”&#xff0c;是电脑上使用刚性的旋转磁性盘片为基础的非依电性存储器&#xff0c;…

Eclipse_03_如何加快index速度

1. ini配置文件 -Xms&#xff1a;是最小堆内存大小&#xff0c;也是初始堆内存大小&#xff0c;因为堆内存大小可以根据使用情况进行扩容&#xff0c;所以初始值最小&#xff0c;随着扩容慢慢变大。 -Xmx&#xff1a;是最大堆内存大小&#xff0c;随着堆内存的使用率越来越高&a…

CentOS 8离线安装telnet

下载telnet rpm安装包&#xff0c;可从https://www.rpmfind.net/linux/rpm2html/search.php?querytelnet&submitSearch…&systemcentos&arch 根据自己的操作系统下载对应的包&#xff0c;这里以CentOS8为例,分别下载如下的rtp包 xinetd-2.3.15-24.el8.x86_64.rpm…