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

news2024/9/23 17:23:39

题目链接: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;    
    }
};

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

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

相关文章

【职言】三年功能测试,一些测试工作的“吐槽”

以下为作者观点&#xff1a; 概述 作为功能测试&#xff0c;我也分享下日常工作中功能测试值得吐槽的问题&#xff0c;由于工作时间不长且未进过大厂&#xff0c;不了解大公司的工作模式和流程&#xff0c;所以自己的方法和理解都是基于中小公司的工作经验总结&#xff0c;应…

【Linux】Linux基础命令

写在前面&#xff1a; 傍晚时分&#xff0c;你坐在屋檐下&#xff0c;看着天慢慢地黑下去&#xff0c;心里寂寞而凄凉&#xff0c;感到自己的生命被剥夺了。当时我是个年轻人&#xff0c;但我害怕这样生活下去&#xff0c;衰老下去。在我看来&#xff0c;这是比死亡更可怕的事…

flask 之上传与下载

from flask import Flask, render_template, request, send_from_directory, redirect, url_for import osapp Flask(__name__)# 上传文件存储路径 UPLOAD_FOLDER uploads app.config[UPLOAD_FOLDER] UPLOAD_FOLDERapp.route(/) def index():# 确保上传文件夹存在if not os.…

小程序中实现长按二维码图片识别

本文使用小程序提供的imae组件实现二维码的识别&#xff0c;在小程序官方文档中给出了该组件一个用于识别图片的属性show-menu-by-longpress。 属性说明&#xff1a;长按图片显示发送给朋友、收藏、保存图片、搜一搜、打开名片/前往群聊/打开小程序&#xff08;若图片中包含对应…

Ubuntu-20.04.2 mate 上安装、配置、测试 qtcreator

一、从repo中安装 Ubuntu-20.04.2的repo中&#xff0c;qtcreator安装包挺全乎的&#xff0c;敲完 sudo apt install qtcreator 看一下同时安装和新软件包将被安装列表&#xff0c;压缩包252MB&#xff0c;解压安装后933MB&#xff0c;集大成的一包。 sudo apt install qtcrea…

【从服务器获取共享列表失败】【无法与设备或资源通信】解决方案!

【从服务器获取共享列表失败】背景&#xff1a; 某项目搭建有samba共享&#xff0c;使用一段时间后&#xff0c;不知何种原因&#xff0c;客户端链接共享时报&#xff1a;从服务器获取共享列表失败&#xff0c;无效的参数。 可参考解决方案A&#xff1a; 银河麒麟samba共享文…

【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 快慢指针 移动零 class…

分段函数1_分支结构 C语言xdoj112

题目描述: 编写程序计算分段函数f(x)的值。 输入格式&#xff1a;输入实数x的值 输出格式&#xff1a;输出f(x)的值&#xff0c;结果保留两位小数。 示例&#xff1a; 输入&#xff1a;4 输出&#xff1a;2.00 #include <stdio.h> #include <math.h>//分段函数1_分…

如何入门 GPT 并快速跟上当前的大语言模型 LLM 进展?

入门GPT 首先说第一个问题&#xff1a;如何入门GPT模型&#xff1f; 最直接的方式当然是去阅读官方的论文。GPT模型从2018年的GPT-1到现在的GPT-4已经迭代了好几个版本&#xff0c;通过官方团队发表的论文是最能准确理清其发展脉络的途径&#xff0c;其中包括GPT模型本身和一…

【3D数据读取】利用JAVA读取GLB(GLTF)文件数据

了解GLB和GLTF&#xff1a; GLB和GLTF是用于共享3D数据的标准化文件格式。GLB是GLTF的二进制格式&#xff0c;而GLTF基于JSON&#xff0c;一种基于文本的数据格式。 GLB文件&#xff1a; 由一个头部和一个二进制数据块组成。头部包含文件的元数据&#xff0c;例如文件版本、文件…

w3af安装(处理python2和3,pip2和3混乱的问题)

git clone --depth 1 https://github.com/andresriancho/w3af.git cd w3af ./w3af_gui报错 打开w3af_gui看一下 要求必须是python2 但我的/usr/bin/env中的python是python3 我们将/usr/bin/env中的python换成python2 which python2 #/usr/bin/python2rm /usr/bin/pythonsud…

网络安全-零信任安全

本文为作者学习文章&#xff0c;按作者习惯写成&#xff0c;如有错误或需要追加内容请留言&#xff08;不喜勿喷&#xff09; 本文为追加文章&#xff0c;后期慢慢追加 零信任的概念 零信任技术体系是一种安全架构和策略&#xff0c;其核心理念是不信任任何用户或设备&#…

科聪控制系统典型应用车型 —— 料箱机器人

料箱机器人即料箱AGV是一种智能化物流搬运设备&#xff0c;它可以代替人力完成出库入库和搬运工作&#xff0c;可根据出入库生产出货需求&#xff0c;将货物从起点运送到终点&#xff0c;自动柔性完成货到人货到点的操作。 提升仓储和物流效率的自动化利器 料箱机器人的投用能…

查询后矩阵的和

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 问题描述 给你一个整数 n 和一个下标从 0 开始的 二维数组 queries &#xff0c;其中 queries[i] [t…

【小白专用】php pdo sqlsrv 类,php连接sqlserver

1.找到自己版本&#xff0c;我的程序是64位的。 注意&#xff1a;ts与nts的区别&#xff0c;查看phpinfo信息&#xff0c;如下 <?phpecho phpinfo();?> 2.运行后&#xff0c;可以查看到如下数据&#xff1a; ① PHP 的版本是8.2.13&#xff1b; ② 属于线程安全版 ts…

gitcode邀请协作人员

项目首页 点击项目设置 点击项目成员设置--生成邀请链接 设置权限、是否需要审核、成员有效时间、邀请链接有效时间&#xff08;不设置时间就是永久有效&#xff09; 点击创建链接 点击复制分享给别人加入即可

CSharp中Blazor初体验

Blazor 是一个由微软开发的开源 Web 框架&#xff0c;用于构建富客户端 Web 应用程序使用 C# 语言和 .NET 平台。Blazor 允许开发人员使用 C# 语言来编写前端 Web 应用程序&#xff0c;而不需要像传统的 JavaScript 框架&#xff08;如 Angular、React 或 Vue.js&#xff09;那…

【SpringBoot快速入门】(1)SpringBoot的开发步骤、工程构建方法以及工程的快速启动详细讲解

目录 SpringBoot简介1 SpringBoot快速入门1.1 开发步骤1.1.1 创建新模块1.1.2 创建 Controller1.1.3 启动服务器1.1.4 进行测试 2 对比3 官网构建工程3.1 进入SpringBoot官网3.2 选择依赖3.3 生成工程 4 SpringBoot工程快速启动4.1 问题导入4.2 打包4.3 启动 之前我们已经学习的…

鸿蒙原生应用再添新丁!喜马拉雅入局鸿蒙

鸿蒙原生应用再添新丁&#xff01;喜马拉雅入局鸿蒙 来自 HarmonyOS 微博12月20日消息&#xff0c; #喜马拉雅正式完成鸿蒙原生应用版本适配#&#xff0c;作为音频业巨头的喜马拉雅 &#xff0c;将基于#HarmonyOS NEXT#创造更丰富、更智慧的全场景“声音宇宙”&#xff01;#鸿…

校园导游系统-Java实现

一. 题目 设计一个校园导游系统。设计学校的校园平面图&#xff0c;选取若干个具有代表性的景点抽象成一个无向带权图&#xff0c;以图中顶点表示校内各景点&#xff0c;边上的权值表示两景点之间的距离。存放景点代号、名称、简介等信息供用户查询。为来访客人提供图中任意景…