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

动态规划之路径问题1

题目来源:

leetcode62:不同路径

解析题目:

从左上角到右下角的不同路径一共有多少种?只能向下或者向右

算法原理: 

状态表示:经验+题目要求

经验就是:以[i][j]位置结尾,巴拉巴拉

题目要求:以[i][j]位置结尾,一共有多少条不同的路径

状态转移方程:以最近的一步推dp[i][j]=什么

根据题目,我们不难发现,ij位置只能由[i][j-1]位置向下,或者[i-1][j]位置向右走

无论哪个方向走到[i][j]都是在原始的基础上走一步,路径不是dp[i][j-1]+1,走一步代表了还是原来的总路径,要理解清楚这一步

所以我们可以得到状态转移方程为dp[i][j]=dp[i][j-1]+dp[i-1][j];

初始化:保证填表时不会越界

不难发现我们需要用到状态转移方程最上面一行和最左边一列都会越界

第一种:也是最简单最安全最保险的一种就是把这些位置都初始化,但代码冗长

第二种:就是上一篇博客所提到的,补一行和一列,使其成为虚拟结点

要注意虚拟结点的两个注意事项:1.保证后面的填表顺序是正确的,我们不难发现最上面的一行和最左边的一列都要填1,所以我们只需要把dp[0][1]=1;这个位置设为1,然后别的位置为0,后面去填表就不会出错

2.要注意映射关系:我们原来的mXn要多开一行一列,所以填表是要注意从上面位置开始填

填表顺序:

观察发现:我们需要一行一行的填,这能保证填这个位置时有上面的也有左边的

返回值:

由于数组下标是从0开始,我们直接返回dp[m][n]即可

代码实现:

注意我们是从第一行第一列开始填表

如果不熟悉二维数组vector的使用,可以去看我们c++专栏中的STL之vector的使用 

http://www.xdnf.cn/news/255619.html

相关文章:

  • 从括号匹配看栈:数据结构入门的实战与原理
  • 中小企业MES系统需求文档
  • 数控滑台:将制造业推向智能化的关键装备
  • C++_STL
  • 每日算法-250502
  • 【免费】2007-2021年上市公司对外投资数据
  • 专题二十二:DHCP协议
  • (13)Element Plus详细使用方法
  • leetcode 838. 推多米诺 中等
  • 【Linux网络编程】http协议的状态码,常见请求方法以及cookie-session
  • 英一真题阅读单词笔记 22-23年
  • Java 泛型:T、E、K、V 的使用与示例(深入理解)
  • 2025年五一数学建模A题【支路车流量推测】原创论文讲解(含完整python代码)
  • 组件通信-<slot>
  • SX24C01.UG-PXI程控电阻桥板卡
  • BLE协议栈的解析
  • 流水线相关计算【计算机组成与体系结构】
  • SpringTask
  • MySQL — 数据库建库与建表
  • html:table表格
  • B站Michale_ee——ESP32_IDF SDK——FreeRTOS_8 消息缓冲区
  • 神州趣味地名-基于天地图和LeafLet的趣味地名探索
  • 软件工程中的 QFD
  • 力扣面试150题--分隔链表
  • 深度学习视角下魔幻手机的实现探索与技术实践
  • python常用科学计算库及使用示例
  • 第六章 配置能力增强
  • C语言数据类型与内存布局
  • Linux系统中的用户分类、为什么Linux系统中有很多我没有创建的用户?
  • PyTorch_创建线性和随机张量