【动态规划算法】第八题:931.下降路径最小和

news/2024/7/5 2:06:08

💖作者:小树苗渴望变成参天大树🎈
🎉作者宣言:认真写好每一篇博客💤
🎊作者gitee:gitee✨
💞作者专栏:C语言,数据结构初阶,Linux,C++ 动态规划算法\🎄
请添加图片描述
如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧!

文章目录

  • 前言


前言

hello,大家好,我们今天开始讲动态规划的第八题,这个题目相比较前面来说,再dp表上有了一点小变化,中间我会给大家讲解为什么要这么做,话不多说,我们开始进入正文


第八个题目是下降路径最小和

在这里插入图片描述


通过图解来看题目解析

在这里插入图片描述


接下来用动态规划的步骤给大家讲解:

  1. 状态表示:经验+题目要求
    以(i,j)位置为终点,dp[i][j]表示到达(i,j)位置的最小和
  2. 状态转移方程:以最近状态算此状态的值
    在这里插入图片描述
    dp[i][j]=min(x,y,z);
  3. 初始化:保证数组不越界
    在这里插入图片描述
  4. 填表顺序:因为是通过上面一行选择下面的值,和左右没啥关系,所以填表顺序是从上往下,每一行随便
  5. 返回值,根据题目要求,我们要选择出到达最低一行的最小值,而dp表的最后一行是达到最后一行位置的最小值 ,这些任意位置的最小值互相比较才是我们到达最后一行的最小,所以返回值为:min(dp[n][i]);
    在这里插入图片描述

代码实现:

class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& matrix) {
        //1.创建dp表
        int n=matrix.size();
        vector<vector<int>> dp(n+1,vector<int>(n+2,INT_MAX));//先将dp表都初始化为正无穷
         //2.初始化
        for(int i=0;i<=n+1;i++)dp[0][i]=0;//再把第一行变成0
       //3.填表
       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=dp[n][1];
        for(int j=1;j<=n;j++)
            ret=min(ret,dp[n][j]);

        return ret;
    }
}

这题的初始化非常巧妙,如果大家不理解,可以再填表的时候讲最左边和最右边的两种情况加一个判断,来看代码:

class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& matrix) {
        //1.创建dp表 
        int n=matrix.size();
        vector<vector<int>> dp(n+1,vector<int>(n+1));
        //特殊情况
        if(n==1)return matrix[n-1][n-1];
        //3.填表
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(j==1)
                {
                    dp[i][j]=min(dp[i-1][j],dp[i-1][j+1])+matrix[i-1][j-1];//上和右上
                }
                else if(j==n)
                {
                    dp[i][j]=min(dp[i-1][j],dp[i-1][j-1])+matrix[i-1][j-1];//上和左上
                }
                else
                {
                    dp[i][j]=min(dp[i-1][j],min(dp[i-1][j+1],dp[i-1][j-1]))+matrix[i-1][j-1];//三个方向
                }
            }
        }
        int min=dp[n][1];
        for(int i=1;i<=n;i++)
        {
            if(dp[n][i]<=min)
            {
                min=dp[n][i];
            }
        }
      
        //4.返回值
         return min;
    }
};

运行结果:

在这里插入图片描述

这题目总体来说难度不大,理解起来也还好,但是要分析每种情况对应的条件,还有初始化问题,及下标映射关系,这题就讲到这里了,我们下题再见请添加图片描述


http://lihuaxi.xjx100.cn/news/1319498.html

相关文章

【代码随想录day4】两两交换链表中的节点

题目 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。 你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xff1a;[2,1,4,3] 示例 2&#xff1a; …

论文学习——U-Net: Convolutional Networks for Biomedical Image Segmentation

UNet的特点 采用端到端的结构&#xff0c;通过FCN&#xff08;最后一层仍然是通过卷积完成&#xff09;&#xff0c;最后输出图像。通过编码&#xff08;下采样&#xff09;-解码&#xff08;上采样&#xff09;形成一个“U”型结构。每次下采样时&#xff0c;先进行两次卷积&…

VUE项目打包成apk

在我们的开发需求中&#xff0c;可能会遇到需要将vue项目中的H5代码打包成一个安卓的app&#xff0c;那么我为大家介绍一套保姆级的解决方案&#xff0c;看完你就会。 VUE HBuilder 1.准备工作&#xff1a; 需要下载一个HBuilder X编辑器&#xff0c;不过我相信大家身为前端…

代码随想录算法训练营第59天 | 503.下一个更大元素 II + 42.接雨水

今日任务 目录 503.下一个更大元素 II - Medium 42.接雨水 - Hard 503.下一个更大元素 II - Medium 题目链接&#xff1a;力扣-503. 下一个更大元素 II 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nu…

【C语言基础】函数(2)

在函数&#xff08;1&#xff09;中我们已经讲过了函数的定义&#xff0c;形参与实参&#xff0c;函数的调用&#xff0c;局部变量与栈内存 接下来还有几个要强调的函数相关知识。 一、静态函数 静态函数是在函数声明前加上关键字 static 的函数。静态函数在C语言中具有以…

MySQL的高可用性方案有哪些?MySQL的字段类型如何选择和优化?MySQL的并发控制机制是怎样的?MySQL的全文搜索如何实现?

1、MySQL的高可用性方案有哪些&#xff1f; MySQL的高可用性方案有以下几种&#xff1a; 主从复制&#xff08;Master-Slave Replication&#xff09;&#xff1a;这是MySQL最常用的高可用性方案之一。在主从复制中&#xff0c;一个主数据库&#xff08;Master&#xff09;接收…

2023-07-07 LeetCode每日一题(过桥的时间)

2023-07-07每日一题 一、题目编号 2532. 过桥的时间二、题目链接 点击跳转到题目位置 三、题目描述 共有 k 位工人计划将 n 个箱子从旧仓库移动到新仓库。给你两个整数 n 和 k&#xff0c;以及一个二维整数数组 time &#xff0c;数组的大小为 k x 4 &#xff0c;其中 tim…

Vue组件库Element-常见组件-分页

常见组件-Pagination 分页 Pagination 分页&#xff1a;当数据过多时&#xff0c;会使用分页分解数据 具体关键代码如下&#xff1a;&#xff08;重视注释&#xff09; <template><div><!-- Pagination 分页 --><el-pagination background layout"…