【动态规划专栏】专题二:路径问题--------1.不同路径

这篇具有很好参考价值的文章主要介绍了【动态规划专栏】专题二:路径问题--------1.不同路径。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。

💓博主csdn个人主页:小小unicorn
⏩专栏分类:动态规划专栏
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识

题目来源

本题来源为:

Leetcode62. 不同路径

题目描述

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

问总共有多少条不同的路径?
【动态规划专栏】专题二:路径问题--------1.不同路径,算法专栏,# 动态规划算法专栏,动态规划,算法,c++

题目解析

我们可以模拟一下机器人的过程:
【动态规划专栏】专题二:路径问题--------1.不同路径,算法专栏,# 动态规划算法专栏,动态规划,算法,c++

算法原理

1.状态表示

经验+题目要求
【动态规划专栏】专题二:路径问题--------1.不同路径,算法专栏,# 动态规划算法专栏,动态规划,算法,c++

对于本题而言就是:
dp[i][j]表示:走到[i,j]位置的时候,一共有多少种方式。

2.状态转移方程

机器人到达[i,j]位置有两种,一种从上面过来,一种从左边过来。
【动态规划专栏】专题二:路径问题--------1.不同路径,算法专栏,# 动态规划算法专栏,动态规划,算法,c++
根据最近的一步划分问题:
【动态规划专栏】专题二:路径问题--------1.不同路径,算法专栏,# 动态规划算法专栏,动态规划,算法,c++

因此状态方程为:
【动态规划专栏】专题二:路径问题--------1.不同路径,算法专栏,# 动态规划算法专栏,动态规划,算法,c++

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

3.初始化

初始化之前先看一下会有什么位置会发生越界访问:
【动态规划专栏】专题二:路径问题--------1.不同路径,算法专栏,# 动态规划算法专栏,动态规划,算法,c++
因为机器人要么从上边下来,要门从左边下来,因此会发生越界的为第一排和第一列。

我们基本上会采取以下的初始化方式,在原二维数组的基础上加一行一列。
【动态规划专栏】专题二:路径问题--------1.不同路径,算法专栏,# 动态规划算法专栏,动态规划,算法,c++
加上之后要注意两点:
【动态规划专栏】专题二:路径问题--------1.不同路径,算法专栏,# 动态规划算法专栏,动态规划,算法,c++
下标映射注意新表与原始的下标关系即可,而虚拟节点里面的值要根据情况而定:
【动态规划专栏】专题二:路径问题--------1.不同路径,算法专栏,# 动态规划算法专栏,动态规划,算法,c++
观察一下,第二行从第三个开始需要它上面的和左面的两个一起决定,而且要保证它上面的也就是虚拟节点不能被选上(也就是不影响结果)那么它应该就是负无穷,但是本题的范围:
【动态规划专栏】专题二:路径问题--------1.不同路径,算法专栏,# 动态规划算法专栏,动态规划,算法,c++
所以我们赋值为0就不会被选上了。依次内推:
【动态规划专栏】专题二:路径问题--------1.不同路径,算法专栏,# 动态规划算法专栏,动态规划,算法,c++

因为第二排的第二个位置会决定其他位置的值,因此要赋值为1;这里有两种,可以从上面虚拟节点也可以从左面的虚拟节点进行赋值。

4.填表顺序

整体从上往下,每排从左往右。

5.返回值

根据题目要求,需要返回右下角的值,因此返回:
dp[m][n]

代码实现

动态规划的代码基本就是固定的四步:

1.创建dp表
2.初始化
3.填表
4.返回值

本题完整代码实现:

class Solution 
{
public:
    int uniquePaths(int m, int n) 
    {
            // 1.创建dp表
            // 2.初始化
            // 3.填表
            // 4.返回值
            vector<vector<int>> dp(m+1,vector<int>(n+1));
            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];
    }
};

时间复杂度:O(MN)
空间复杂度:O(M
N)文章来源地址https://www.toymoban.com/news/detail-830798.html

到了这里,关于【动态规划专栏】专题二:路径问题--------1.不同路径的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法训练Day39:62.不同路径 63. 不同路径 II 动态规划

    Category Difficulty Likes Dislikes ContestSlug ProblemIndex Score algorithms Medium (67.70%) 1746 0 - - 0 Tags Companies 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。

    2023年04月25日
    浏览(34)
  • 算法D39 | 动态规划2 | 62.不同路径 63. 不同路径 II

    今天开始逐渐有 dp的感觉了,题目不多,就两个 不同路径,可以好好研究一下 62.不同路径  本题大家掌握动态规划的方法就可以。 数论方法 有点非主流,很难想到。  代码随想录 视频讲解: 动态规划中如何初始化很重要!| LeetCode:62.不同路径_哔哩哔哩_bilibili 这个题看

    2024年04月10日
    浏览(36)
  • 动态规划之不同路径解决问题

    题目链接选自力扣 : 不同路径 题目不难读懂, 就是遵循一个规则, 机器人从起点开始, 只允许向右或者向下行走, 不允许返回而最终到达终点时一共有多少种不同的路径. 比如在一个 2 * 3 的矩阵里, 从做烧焦起点(0,0) 到达终点右下角(1,2) 一共有多少种方法. 通过题目要求, 发现一

    2024年02月11日
    浏览(28)
  • 【动态规划】路径问题_不同路径_C++

    题目链接:leetcode不同路径 目录 题目解析: 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目让我们求总共有多少条不同的路径可到达右下角; 由题可得: 机器人位于一个  m x n   网格; 机器人每次只能向下或者向右移动一步; 我们拿示例

    2024年02月05日
    浏览(32)
  • 算法day39|动态规划:不同路径Ⅰ、Ⅱ

    https://leetcode.cn/problems/unique-paths/ 了解下标含义——这里是行列数 理解为什么dfs不能做这道题(超时) https://leetcode.cn/problems/unique-paths-ii/ 初始化时也应该注意限制条件 注意特殊情况的判断

    2024年02月06日
    浏览(39)
  • LeetCode算法题解(动态规划)|LeetCoed62. 不同路径、LeetCode63. 不同路径 II

    题目链接:62. 不同路径 题目描述: 一个机器人位于一个  m x n   网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示例 1: 示例 2:

    2024年02月05日
    浏览(41)
  • 【算法|动态规划系列No.5】leetcode62. 不同路径

    个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助 🍓希望我们一起努力、成长,共同进步。

    2024年02月12日
    浏览(32)
  • 【算法|动态规划No.6】leetcode63. 不同路径Ⅱ

    个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助 🍓希望我们一起努力、成长,共同进步。

    2024年02月16日
    浏览(41)
  • 动态规划解“不同路径问题”(所有路径、有障碍物时的所有路径)

    题目1:不同路径(求到达右下角的所有路径) 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径?    解题思路

    2024年02月14日
    浏览(31)
  • 力扣算法刷题Day39|动态规划:不同路径 I&II

    力扣题目:#62.不同路径 刷题时长:参考题解后10min 解题方法:动规 复杂度分析 时间O(m*n) 空间O(m*n) 问题总结 初始化二维数组的python语法:i 对应 m,j 对应n 二维遍历顺序,从上到下从左到右通过两层for循环实现,其中startindex应为1 本题收获 动规思路 确定dp数组及下标的含义

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包