动态规划路径问题(C++)

文章目录


前言

一、不同路径

62. 不同路径

1.状态表示

以[i,j]位置为结尾,...

结合本道题木:dp[i,j]:以【i,j】位置为结尾有多少条不同路径

2.状态转移方程

dp[i]是什么

dp[i][j]=dp[ i ][ j-1 ]+dp[ i-1 ][ j ];

3.初始化

我们填表时,第一行和第一列需要进行初始化操作。

我们可以多开一行和一列,用虚拟节点帮助我们进行初始化。

虚拟节点:

1.虚拟节点的值要保证填表是正确的

2.下标的映射

我们这里可以给成0,而dp[ 0 ][ 1 ]位置给成1.

4.填表顺序

从左到右,从上到下

5.返回值是什么

返回dp[ m ][ n]

6.代码编写

cpp 复制代码
class Solution {
public:
    int uniquePaths(int m, int n) 
    {
        vector<vector<int>>dp(m+1,vector<int>(n+1,0));
        dp[0][1]=1;
        for(int i=1;i<=m;i++)
        {
            for(int j=1;j<=n;j++)
            {
                dp[i][j]=dp[i-1][j]+dp[i][j-1];
            }
        }
        return dp[m][n];


    }
};

二、下降路径最小和

931. 下降路径最小和

1.状态表示

列出dp表,dp表中值的含义是什么

dp[i,j]:到达[i,j]位置,所有下降路径中最小和

2.状态转移方程

dp[i]是什么

dp[i][j] = min(dp[i - 1][j], min(dp[i - 1][j - 1], dp[i - 1][j +

1])) + matrix[i][j] 。

3.初始化

可以在最前⾯加上⼀个「辅助结点」,帮助我们初始化。使⽤这种技巧要注意两个点:

i. 辅助结点⾥⾯的值要「保证后续填表是正确的」;

ii. 「下标的映射关系」。

在本题中,需要「加上⼀⾏」,并且「加上两列」。
所有的位置都初始化为⽆穷⼤,然后将第⼀行,初始化为 0 即可

4.填表顺序

填表的顺序是「从上往下」

5.返回值是什么

返回「 dp 表中最后⼀⾏的最⼩值」

6.代码编写

cpp 复制代码
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));
        //第一行初始化为0
        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(min(dp[i-1][j-1],dp[i-1][j]),dp[i-1][j+1])+matrix[i-1][j-1];
            }
        }

        //返回值
        int remin=INT_MAX;
        for(int j=0;j<=n+1;j++)
        {
            remin=min(remin,dp[n][j]);
        }
        return remin;
    }
};

总结

以上就是今天要讲的内容。希望对大家的学习有所帮助,仅供参考 如有错误请大佬指点我会尽快去改正 欢迎大家来评论~~ 😘 😘 😘

相关推荐
DFT计算杂谈12 小时前
KPROJ编译教程
java·前端·python·算法·conda
重生之我是Java开发战士12 小时前
【笔试强训】Week5:空调遥控, kotor和气球,走迷宫,主持人调度II,体操队形,二叉树的最大路径和,排序子序列,消减整数
java·算法·动态规划
j_xxx404_13 小时前
Linux进程信号捕捉与操作系统运行本质深度解析
linux·运维·服务器·开发语言·c++·人工智能·ai
吃好睡好便好13 小时前
用if…end…语句计算分段函数
开发语言·人工智能·学习·算法·matlab
vx-程序开发13 小时前
基于机器学习的动漫可视化系统的设计与实现-计算机毕业设计源码08339
java·c++·spring boot·python·spring·django·php
灰灰勇闯IT13 小时前
ops-memory:CANN Runtime 的 Tensor 内存管理
算法
叶子Talk13 小时前
OpenAI破解80年数学猜想,AI首次做出原创证明
人工智能·数学·算法·机器学习·ai·openai·ai推理
MhZhou041214 小时前
1.11M参数小模型实现脑瘤分割 CVPR 2026 Findings 开源
算法·计算机视觉·3d·空间计算
有为少年14 小时前
Welford算法 | 从单一到批次
大数据·人工智能·深度学习·神经网络·算法·机器学习
吴可可12314 小时前
Teigha处理CAD样条曲线的方法解析
数据库·算法·c#