当前位置: 首页 > news >正文

【算法|动态规划No.16】leetcode931. 下降路径最小和

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【手撕算法系列专栏】【LeetCode】
🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助
🍓希望我们一起努力、成长,共同进步。
在这里插入图片描述

点击直接跳转到该题目

目录

  • 1️⃣题目描述
  • 2️⃣题目解析
  • 3️⃣解题代码

1️⃣题目描述

给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径 的 最小和 。

下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即位于正下方或者沿对角线向左或者向右的第一个元素)。具体来说,位置 (row, col) 的下一个元素应当是 (row + 1, col - 1)、(row + 1, col) 或者 (row + 1, col + 1)

示例1:

在这里插入图片描述
输入:matrix = [[2,1,3],[6,5,4],[7,8,9]]
输出:13
解释:如图所示,为和最小的两条下降路径

示例2:

在这里插入图片描述
输入:matrix = [[-19,57],[-40,-5]]
输出:-59
解释:如图所示,为和最小的下降路径

注意:

  • n == matrix.length == matrix[i].length
  • 1 <= n <= 100
  • -100 <= matrix[i][j] <= 100

2️⃣题目解析

初始化:

  • dp表多开辟了一块空间。这是因为在计算最小下降路径和时,每一行的路径和都依赖于上一行的路径和。为了简化边界条件的处理,我们可以在dp表的第一行和最后一行外分别多开辟一列,将这些额外的空间初始化为INT_MAX。这样,当计算最小路径和时,我们不必特殊处理边界情况,而是统一使用通用的递推公式。(简而言之,多开辟了一行两列的空间

状态表示:

  • dp[i][j]表示到达(i,j)位置的最小下降路径和

状态转移方程:

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

返回值:

  • 循环遍历dp表中的所有有效位置ret = min(ret,dp[n][i]);
for(int i = 1;i <= n;i++)
{ret = min(ret,dp[n][i]);
}
return ret;

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 i = 0;i < n + 2;i++) dp[0][i] = 0;for(int i = 1;i <= n;i++){for(int j = 1;j <= n;j++){int x = dp[i - 1][j - 1],y = dp[i - 1][j],z = dp[i - 1][j + 1];dp[i][j] = matrix[i - 1][j - 1] + min(min(x,y),z);}}int ret = INT_MAX;for(int i = 1;i <= n;i++){ret = min(ret,dp[n][i]);}return ret;}
};

最后通过啦!!!
在这里插入图片描述

http://www.lryc.cn/news/188029.html

相关文章:

  • Jenkins 构建时动态获取参数
  • android app开机自启动
  • XSS CSRF
  • 新加坡星银行项目组笔试题面试题
  • 基于SpringBoot的智能物流管理系统
  • 【开源电商网站】(2),使用docker-compose和dockerfile进行配置,设置自定义的镜像,安装插件,增加汉化包,支持中文界面汉化。
  • HTML5开发实例-3D全景(ThreeJs全景Demo) 详解(图)
  • springboot项目静态资源映射
  • 【Linux初阶】多线程1 | 页表的索引作用,线程基础(优缺点、异常、用途),线程VS进程,线程控制,C++多线程引入
  • Flink--9、双流联结(窗口联结、间隔联结)
  • 家政服务行业做开发微信小程序可以实现什么功能
  • 20哈希表-三数之和
  • JVM 运行时数据区和垃圾收集算法
  • Java基于SpringBoot的高校招生系统
  • 6. Python使用Asyncio开发TCP服务器简单案例
  • 景联文科技:AI大模型强势赋能,助力自动驾驶迭代升级
  • 多周期CPU设计
  • Go 复合类型之字典类型介绍
  • 对于无法直接获取URL的数据爬虫
  • 35.树与二叉树练习(1)(王道第5章综合练习)
  • JSON数据处理工具-在线工具箱网站tool.qqmu.com的使用指南
  • leetcode:190. 颠倒二进制位
  • Spring Cloud--@RefreshScope动态刷新的注意事项
  • visual-studio-code通过跳板机连接远程服务器的配置操作
  • LuatOS-SOC接口文档(air780E)-- gpio - GPIO操作
  • 一个命令让redis服务端所有信息无所遁形~(收藏吃灰系列)
  • 通过Node.js获取高德的省市区数据并插入数据库
  • 记一次 .NET某账本软件 非托管泄露分析
  • Oracle笔记-对ROWNUM的一次理解(简单分页)
  • 系统架构设计:10 论数据湖技术及其应用