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

63.不同路径

dp问题描述

62.不同路径
在这里插入图片描述

确定本题的状态表示

dp[i][j]表示的是从最左上角移动到(i,j)位置的路径总数

确定本题的状态转移方程

根据已知条件:dp[1][1]=1
这个题目我们要考虑障碍物,因此下面就(i,j)位置附近有没有障碍物做分类讨论

  1. 如果(i-1,j)处是障碍物,那么dp[i][j]=dp[i][j-1]
  2. 如果(i,j-1)处是障碍物,那么dp[i][j]=dp[i-1][j]
  3. 如果(i-1,j)和(i,j-1)处都没有障碍物,
    则: dp[i][j]=dp[i-1][j]+dp[i][j-1]

当然在实现的时候我们可以对它进行一个优化。是遇到有障碍物的位置,我们就对它不做处理,即到达这个位置的路径为零。然后后面无论(i,j)位置附近有没有障碍物,dp[i][j]都可以根据下面的递推公式来计算dp[i][j]=dp[i-1][j]+dp[i][j-1]

填表求值

根据初始条件和状态转移方程,确定填表顺序,进而逐步填满dp表,最终返回题目要的结果

代码实现

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m=obstacleGrid.size();if(m==0) return 0;int n=obstacleGrid[0].size();vector<vector<int>> dp(m+1,vector<int>(n+1,0));if(obstacleGrid[0][0]==0)dp[1][1]=1;cout << m<< " "<< n<<endl;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(i==1&&j==1) continue;if(obstacleGrid[i-1][j-1]==1) continue;dp[i][j]=dp[i-1][j]+dp[i][j-1];}}return dp[m][n];}
};
http://www.dtcms.com/a/336519.html

相关文章:

  • Django前后端交互实现用户登录功能
  • 计算机网络---跳板机与堡垒机
  • Centos 更新/修改宝塔版本
  • 第七十八章:AI的“智能美食家”:输出图像风格偏移的定位方法——从“滤镜病”到“大师风范”!
  • 点云的PFH 和 FPFH特征
  • k8sday09
  • C# 反射和特性(自定义特性)
  • 股票术语:“支撑位”
  • 解码词嵌入向量的正负奥秘
  • 一张图总结 - AI代理上下文工程:构建Manus的经验教训
  • Python多线程、锁、多进程、异步编程
  • Linux | i.MX6ULL网络通信-套字节 TCP(第十七章)
  • 【k8s】Kubernetes核心概念与架构详解
  • 4.8 Vue 3: provide / inject 详解
  • LEA(Load Effective Address)指令
  • MACS2简介
  • 欠拟合和过拟合的特征标志,有什么方法解决,又该如何避免
  • 评测系统构建
  • 20.LeNet
  • [逆向知识] AST抽象语法树:混淆与反混淆的逻辑互换(二)
  • 2001-2024年中国玉米种植分布数据集
  • Cesium学习(二)-地形可视化处理
  • AutoSar BSW介绍
  • PyTorch 面试题及详细答案120题(01-05)-- 基础概念与安装
  • 全星质量管理 QMS:驱动制造业高质量发展的核心工具
  • 雷卯针对香橙派Orange Pi 5 Ultra开发板防雷防静电方案
  • Java研学-SpringCloud(五)
  • 如何理解“速度模式间接实现收放卷恒张力控制“
  • 题目2:使用递归CTE分析产品层级关系
  • 【从零开始学习Redis】项目实战-黑马点评D2