算法---动态规划练习-5(下降路径最小和)

news2024/11/19 23:19:26

下降路径最小和

  • 1. 题目解析
  • 2. 讲解算法原理
    • 方法一
    • 方法二
  • 3. 编写代码
    • 法一
    • 法二

1. 题目解析

题目地址:点这里

在这里插入图片描述

2. 讲解算法原理

在这里插入图片描述


方法一

  1. 首先,通过matrix的大小确定矩阵的行数m和列数n。

  2. 创建一个大小为(m+1) × (n+2)的二维动态规划数组dp,其中dp[i][j]表示从顶部到达矩阵位置(i-1, j-1)的最小下降路径和。

  3. 初始化动态规划数组的第一行为0,表示从顶部开始的路径和为0。

  4. 从矩阵的第二行开始,依次填表。对于每个位置(i, j),计算dp[i][j]的值:

  • 选择上一行相邻的三个位置(i-1, j-1)、(i-1, j)、(i-1, j+1)中的最小值,记为t
  • 如果t等于0,表示上一行的三个相邻位置都为0,说明当前位置(i, j)无法从上一行的相邻位置下降到达,需要选择其他路径
    • 如果(i-1, j-1)为0,说明只能选择(i-1, j)和(i-1, j+1)中的较小值作为t
    • 否则,选择(i-1, j-1)和(i-1, j)的较小值作为t
  • 将当前位置的值matrix[i-1][j-1]与t相加,得到从顶部到达当前位置的最小路径和,并将其赋给dp[i][j]
  1. 在最后一行,遍历所有位置(m, i),找到最小的路径和,并将其存储在变量min中。

  2. 返回变量min,即从顶部到底部的最小下降路径和。

方法二

  1. 首先,通过matrix的大小确定矩阵的行数n

  2. 创建一个大小为(n+1) × (n+2)的二维动态规划数组dp,其中dp[i][j]表示从顶部到达矩阵位置(i-1, j-1)的最小下降路径和

  3. 初始化动态规划数组的第一行为0,表示从顶部开始的路径和为0。

  4. 从矩阵的第二行开始,依次填表。对于每个位置(i, j),计算dp[i][j]的值

  • 选择上一行相邻的三个位置(i-1, j-1)、(i-1, j)、(i-1, j+1)中的最小值,记为t
  • 将当前位置的值matrix[i-1][j-1]与t相加,得到从顶部到达当前位置的最小路径和,并将其赋给dp[i][j]
  1. 在最后一行,遍历所有位置(n, j),找到最小的路径和,并将其存储在变量ret中。

  2. 返回变量ret,即从顶部到底部的最小下降路径和。


3. 编写代码

法一

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

法二

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 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 j = 1; j <= n; j++)
        ret = min(ret, dp[n][j]);
        
        return ret;
    }
};

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

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

相关文章

OC 技术 苹果内购

一直觉得自己写的不是技术&#xff0c;而是情怀&#xff0c;一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的&#xff0c;希望我的这条路能让你们少走弯路&#xff0c;希望我能帮你们抹去知识的蒙尘&#xff0c;希望我能帮你们理清知识的脉络&#xff0…

2022 年甘肃省职业院校技能大赛 高职组 网络系统管理竞赛 网络构建模块试题

2022 年甘肃省职业院校技能大赛 高职组网络系统管理竞赛 网络构建模块试题 目 录 考试说明… 3 任务描述… 3 任务清单… 3 &#xff08;一&#xff09;基础配置… 3 &#xff08;二&#xff09;有线网络配置… 4 &#xff08;三&#xff09;无线网络配置… 6 &#xff08;四&a…

惊艳亮相!新版飞桨星河社区邀您共赴星辰大海

亲爱的开发者们&#xff1a; 一场始于好奇、归于热爱的邂逅&#xff0c;让开发者们在飞桨星河社区相聚&#xff0c;相逢于活动、课程、比赛、项目……五年来&#xff0c;千万开发者的共同参与&#xff0c;让这个社区更富活力、更加温暖。 2018年&#xff0c;AI Studio 1.0版本上…

RHCE- 4-Web服务器(2)

基于https协议的静态网站 概念解释 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。 HTTP协议以明文方式发送内容&#xff0c;不提供任何方式的数据加密&#xff0c;如果攻击者截取了Web浏览器和网站服务器之间的传输报文&#xff0c;就可以直接读懂其中…

LVS负载均衡(load balance)

一 LVS LVS&#xff1a;Linux Virtaul Server&#xff0c;该软件的功能是实现 LB&#xff08;load balance&#xff09; 二LVS 的三种工作模式 1.NAT 模式&#xff08;NAT&#xff09; LVS 服务器同时充当一台 NAT 网关&#xff0c;拥有公有 IP &#xff0c;同时负责将针对此…

Apple Vision Pro应用合集

这里给大家分享一个网站&#xff0c;手机了最新的apple vision pro 上面运行的应用。 1、查找应用&#xff1a;用户可以浏览特色推荐的应用&#xff0c;或者通过随机挑选功能发现新的应用。 2、社区交流&#xff1a;提供社区功能&#xff0c;用户可以在这里交流使用体验、分享…

Chrome/Edge 使用 Markdown Viewer 查看 Markdown 格式文件

Chrome/Edge 使用 Markdown Viewer 查看 Markdown 格式文件 0. 引言1. 安装 Markdown Viewer 插件2. 使用 Markdown Viewer 阅读 Markdown 格式文件 0. 引言 大部分程序员都喜欢 Markdown 格式的文件&#xff0c;这时给一些没有在电脑上安装 Markdown 编辑器的同事分享资料时&…

SAP gui 组服务器 提示 Error service sapmsPRD unknown

/etc/hosts 追加IP地址和域名的配对关系 /etc/services 追加 sapms[sid] 3601/tcp

java数据结构与算法刷题-----LeetCode665. 非递减数列

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 解题思路&#xff1a;时间复杂度O( n n n)&#xff0c;空间复杂度…

在vscode终端terminal加大栈空间How to increase max stack size in c++ using vscode

参考:https://devpress.csdn.net/cloud/63268204fd0b112779162383.html Answer a question In many dynamic programming and graph problems it is required to do long depth recursion. I am currently using vscode and mingw in windows for my c programs. But in defau…

计算机视觉之三维重建(4)---三维重建基础与极几何

文章目录 一、三维重建基础1.1 问题引入1.2 线性解法1.3 非线性解法1.4 多视图几何的关键问题 二、极几何与基础矩阵2.1 极几何2.2 极几何特例2.3 本质矩阵2.4 本质矩阵的性质2.5 基础矩阵2.6 基础矩阵的性质 三、基础矩阵估计 一、三维重建基础 1.1 问题引入 1. 从单张图像恢…

MySQL Explain 字段详解

Explain 工具介绍 Explain 一般被称为解释器&#xff0c;通过 Explain 工具&#xff0c;我们能分析我们使用的查询语句或是结构的性能瓶颈&#xff0c;它提供 MySQL 如何执行语句的信息。 使用语法&#xff1a; explain [extended|partition] select在 select 关键字前加 ex…

【多模态融合】SuperFusion 激光雷达与相机多层次融合 远距离高清地图预测 ICRA 2024

前言 本文介绍激光雷达与相机进行多层次融合&#xff0c;包括数据级融合、特征级融合和BEV级融合。 融合后的BEV特征可以支持不同的任务头&#xff0c;包括语义分割、实例编码和方向预测&#xff0c;最后进行后处理生成高清地图预测&#xff0c;它是来自ICRA 2024的。 会讲解…

【C++ leetcode】双指针(专题完结)

15. 三数之和 题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的…

3.26学习总结

java 实例变量和局部变量 实例变量是记录这个类中对象的特点的每一个对象的实例变量都可以不同(例如名字,性别等),其中一个对象的实例变量改变不会影响其他的变量. 类变量是一种特殊的实例变量,他的特殊在于所有的对象的类变量都是相同的,当一个对象改变了类变量那么所有对象…

0101支付安全-支付模块-项目实战

文章目录 一、信息安全的基础-机密性1 相关概念2 对称加密和非对称加密 二、身份认证三 摘要算法四、数字签名五、数字证书结语 在支付过程中&#xff0c;设计多方的敏感信息&#xff0c;那么安全尤为重要。下面先简单介绍下&#xff0c;相关概念。 一、信息安全的基础-机密性 …

Java项目:76 Springboot学生读书笔记共享

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本文从管理员、用户的功能要求出发&#xff0c; 读书笔记共享平台系统中的功能模块主要是实现管理员&#xff1b;首页、个人中心、用户管理、…

Intellij IDEA构建Android开发环境

Intellij IDEA创建项目时没有Android的选项 进设置&#xff08;Intellij IDEA - Settings - Plugins &#xff09; 再次创建项目可以看到Android的选项 解决Android导入项目时Gradle下载速度慢/超时/失败

Ansys Speos | Light Expert Group探测器组使用技巧

附件下载 联系工作人员获取附件 概述 相机挡板的设计需要在光路的不同位置同步多个照度图&#xff0c;以尽量减少杂散光。2023R2 Speos提供了一种新的探测器&#xff0c;用于高阶杂散光分析&#xff0c;可以同时对多个探测器进行光线追迹。Light Expert工具可以即时过滤3D视…

docker安装elasticseachkibana

1.docker安装es 创建本机挂载目录&#xff0c;与容器上目录映射 /Users/wangpei/2024/mydata/elasticsearch conf下创建yml文件 echo "http.host : 0.0.0.0" >> /Users/wangpei/2024/mydata/elasticsearch/config/elasticsearch.yml 安装容器&#xff1a; d…