首页 > 其他分享 >动态规划-路径问题——931.下降路径最小和

动态规划-路径问题——931.下降路径最小和

时间:2024-10-11 19:20:47浏览次数:11  
标签:初始化 位置 路径 最小 一行 931 节点 dp

1.题目解析

题目来源:931.下降路径最小和——力扣

测试用例

2.算法原理

1.状态表示

我们可以开辟一个dp表,多开辟一行两列用来存储虚拟位置,dp[i][j]表示从第一行到该位置的最小路径和

2.状态转移方程

由于要找到最小路径和,并且由题目可以知道每一个位置的只能向下移动到下一行中相距最近的三个位置之一,由此可以得到状态表示方程为某个位置的最小路径=上面一行三个最近位置距离和+最小值与当前节点本身的值,代码表示为:dp[i][j] = min(dp[i-1][j-1],min(dp[i-1][j],dp[i-1][j+1])+matrix[i-1][j-1]

3.初始化

上面讲到开辟了一行两列用作虚拟位置的存储,这里就需要对他们进行初始化,开辟虚拟位置的原因是在初始化dp表时边界节点需要使用到上一行相距的三个节点,所以为了避免越界就需要多开辟来使边界节点初始化更加简洁,并且要注意虚拟位置不能干扰节点的正常运算

这里第一行设置为0是保证dp表数据部分第一行的初始化不被影响且不会越界初始化,两列设置为INT_MAX是保证边界节点进行状态转移方程的运算在使用到虚拟位置时不会干扰正常运算

4.填表顺序

这里需要从上向下填表,每一行需要从左向右 

5.返回值

最后一行存储的就是到最后一行的某个节点最小路径和,这里从最后一行取出最小值就是代表整个方阵的最小路径和 

3.实战代码

class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& matrix) 
    {
        int n = matrix.size();
        //多开辟一行两列,并且初始化为INT_MAX
        vector<vector<int>> dp(n+1,vector<int>(n+2,INT_MAX));

        //将第一行虚拟位置初始化为0
        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(dp[n][j],ret);
        }

        return ret;
    }
};

标签:初始化,位置,路径,最小,一行,931,节点,dp
From: https://blog.csdn.net/2301_80689220/article/details/142861143

相关文章

  • Go最小堆
    packagemainimport( "container/heap" "fmt")//IntHeap是一个包含整数的切片,它实现了heap.Interface接口。typeIntHeap[]int//Len方法返回堆中的元素数量。func(hIntHeap)Len()int{returnlen(h)}//Less方法报告索引i的元素是否比索引j的元素......
  • ETA6005Q3Q 2.5A带动态路径管理的单节锂电开关型充电器
    2.5A带动态路径管理的单节锂电开关型充电器  ETA6005是一款充电电流达2.5A的单节锂电开关型充电。其集成了动态路径管理功能,内部路径的开关内阻仅50mohm,允许系统在没有电池的情况下,仍然可以在适配器存在是维持系统正常工作。ETA6005有特有的2级充电设定可通过引脚的0,1来设......
  • 两种物品凑数求最小花费
    模板题有两种物品。第一种权重\(A\),花费\(B\)。第二种权重\(C\),花费\(D\)。每种物品均可以买任意个,求权重总和至少为\(n\)的情况下,最小的花费\(ans\)。结论:设第一种为性价比高的物品。第二种物品购买的数量一定在\(0\simA\)之间。其中\(A\)是性价比高的物品的权重......
  • svnhook--判断本次提交的内容是否在指定路径头下
    有时候在用户提交内容时,只有指定位置下的文件有提交才需要进行一些特定的限制,增加判断路径代码如下,把这个代码加在你要进行限制的前面即可#定义多个路径头SPECIFIED_PREFIXES="tech-middle/demotableqa"#检查提交的文件是否在指定路径头下FILE_IN_SPECIFIED_PATH=false......
  • 简明线性回归算法中的最小二乘法
    我们来通过一个具体的例子说明线性回归算法中最小二乘法如何确定模型参数。示例:房价预测假设我们想用房子的面积(平方英尺)来预测房价(美元)。我们有以下数据集:面积(平方英尺)房价(美元)800150,0001000200,0001200210,0001500280,0001.建立模型我们假设房价与......
  • 网络流 最小费用最大流
    #include<iostream>#include<cstring>#include<algorithm>#include<map>#include<vector>#include<queue>#include<numeric>#include<functional>#include<set>#include<cmath>#include<......
  • 503 最长路径
    //503最长路径.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*http://oj.daimayuan.top/course/5/problem/226有一棵n个节点的树,节点编号从1到n。对于每个节点,请求出经过它的长度最长的简单路径有多长。定义一条路径的长度为这条路径上经过了多......
  • 基于模糊神经网络的移动机器人路径规划matlab仿真
    1.程序功能描述基于模糊神经网络的移动机器人路径规划1.环境地图中的障碍物为静态、未知障碍物,可以随机设置。(一般设置5~7个,为计算简便设置成规则性状的障碍物)2.机器人的行进方向为X轴的正方向,X轴逆时针旋转90°即为Y轴。两驱动轮之间的距离为50cm,驱动轮的直径为30cm。机器人的......
  • Leetcode 864. 获取所有钥匙的最短路径
    1.题目基本信息1.1.题目描述给定一个二维网格grid,其中:‘.’代表一个空房间‘#’代表一堵墙‘@’是起点小写字母代表钥匙大写字母代表锁我们从起点开始出发,一次移动是指向四个基本方向之一行走一个单位空间。我们不能在网格外面行走,也无法穿过一堵墙。如果途经一个......
  • 记录下物理机bond配置及物理机多路径配置
    在进行bond聚合口配置前,要先使用ipa查看当前物理机有哪些网卡,哪些网卡接了线(状态是否为UP)后再确定要用哪两个物理接口进行聚合。 #进行bond模式配置,模式4是动态链接聚合,需和交换机侧的LACP配合使用[root@xxxmapper]#cat/etc/modprobe.d/bonding.confaliasbond0bondingo......