DP:路径规划模型

简介: DP:路径规划模型

     

创作不易,感谢三连支持!

   路径规划主要是让目标对象在规定范围内的区域内找到一条从起点到终点的无碰撞安全路径。大多需要用二维dp数组去实现

一、不同路径

. - 力扣(LeetCode)不同路径

class Solution {
public:
    int uniquePaths(int m, int n) 
    {
       vector<vector<int>>  dp(m+1,vector<int>(n+1));//创建一个有辅助节点的数组
       //初始化dp[0][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];
    }
};

二、不同路径2

. - 力扣(LeetCode)不同路径2

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) 
    {
        int m=obstacleGrid.size(),n=obstacleGrid[0].size();
        vector<vector<int>>  dp(m+1,vector<int>(n+1));//创建一个dp数组
        //初始化dp[0][1]
        dp[0][1]=1;
        //开始填表
        for(int i=1;i<=m;++i)   
        for(int j=1;j<=n;++j)  
            if(obstacleGrid[i-1][j-1]==0)//判断自己当前的格子是不是障碍物
            dp[i][j]=dp[i-1][j]+dp[i][j-1];
       return dp[m][n];
    }
};

三、珠宝的最高价值

. - 力扣(LeetCode)珠宝的最高价值

class Solution {
public:
    int jewelleryValue(vector<vector<int>>& frame) 
    {
        int m=frame.size(),n=frame[0].size();
        vector<vector<int>>  dp(m+1,vector<int>(n+1));//创建一个dp数组
        for(int i=1;i<=m;++i)
           for(int j=1;j<=n;++j)
              dp[i][j]=max(dp[i-1][j],dp[i][j-1])+frame[i-1][j-1];
                return dp[m][n];
    }
};

四、最小路径和

. - 力扣(LeetCode)最小路径和

class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) 
    {
        int m=grid.size(),n=grid[0].size();
        vector<vector<int>> dp(m+1,vector<int>(n+1,INT_MAX));
        dp[0][1]=0;
        for(int i=1;i<=m;++i)
          for(int j=1;j<=n;++j)
             dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i-1][j-1];
               return dp[m][n]; 
    }
};

五、下降路径最小和

. - 力扣(LeetCode)下降路径最小和

class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& matrix) 
    {
       int m=matrix.size(),n=matrix[0].size();
       vector<vector<int>> dp(m+1,vector<int>(n+2,INT_MAX));//加一行,多加两列,两列得是INT MAX
       for(int j=0;j<n+2;++j) dp[0][j]=0;//第一行初始化成0
       for(int i=1;i<=m;++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 ret=INT_MAX;
       for(int j=1;j<=n;++j) ret=min(ret,dp[m][j]);
       return ret;
    }
};

六、地下城游戏

. - 力扣(LeetCode)地下城游戏

class Solution {
public:
    int calculateMinimumHP(vector<vector<int>>& dungeon) 
    {
      int m=dungeon.size(),n=dungeon[0].size();
      vector<vector<int>> dp(m+1,vector<int>(n+1,INT_MAX));
      dp[m-1][n]=1;
      for(int i=m-1;i>=0;--i)
       for(int j=n-1;j>=0;--j)
        {
          int mini=min(dp[i+1][j],dp[i][j+1]);
          dp[i][j]=max(mini-dungeon[i][j],1);//要防止出现大血包
        }
        return dp[0][0];
    }
};

相关文章
|
机器学习/深度学习 自然语言处理 测试技术
模型上新!来通义灵码体验 QwQ-32B 推理模型!
今天,阿里云发布并开源全新的推理模型通义千问QwQ-32B。通过大规模强化学习,千问QwQ-32B在数学、代码及通用能力上实现质的飞跃,整体性能比肩DeepSeek-R1。在保持强劲性能的同时,千问QwQ-32B还大幅降低了部署使用成本,在消费级显卡上也能实现本地部署。
3190 58
|
数据处理 虚拟化 图形学
ESXi 8.0U3e 免费版发布,含官方免费许可证 (序列号 SN Key)
ESXi 8.0U3e 免费版发布,含官方免费许可证 (序列号 SN Key)
8628 5
如何使用Beyond Compare软件进行代码比对
如何使用Beyond Compare软件进行代码比对
940 2
|
数据采集 Web App开发 测试技术
使用Selenium调试Edge浏览器的常见问题与解决方案
在互联网数据采集领域,Selenium常用于自动化网页爬取。针对使用Edge浏览器时遇到的启动远程调试失败、访问受限及代理IP设置等问题,本文提供了解决方案。通过特定命令启动Edge的远程调试模式,并利用Python脚本配合Selenium库,可实现代理IP、User-Agent的设定及Cookie管理等高级功能,有效提升爬虫稳定性和隐蔽性。遵循步骤配置后,即可顺畅执行自动化测试任务。
3810 1
使用Selenium调试Edge浏览器的常见问题与解决方案
|
监控 安全 搜索推荐
新手指南:Google邮箱注册全过程步骤教学
对于从事外贸、需要与外国客户或朋友沟通的小伙伴来说,拥有一个Google账号(也就是Gmail账号,下文统一用Google邮箱来表述)至关重要!
|
测试技术 C语言
C语言中的void函数
C语言中的void函数
2229 1
|
Java 数据处理 Spring
Spring Boot中的模板引擎选择与配置
Spring Boot中的模板引擎选择与配置
1698 0
|
SQL 关系型数据库 MySQL
MySQL环境搭建——“MySQL数据库”
MySQL环境搭建——“MySQL数据库”
|
机器学习/深度学习 人工智能 自动驾驶
智能汽车自动驾驶技术开发需要以下知识储备
【5月更文挑战第5天】自动驾驶汽车融合多种技术:传感器感知环境与定位;计算机视觉处理图像;路径规划与决策制定应对路况;控制执行器确保驾驶稳定性;运用人工智能和机器学习处理数据;通过通信网络实现车联协作;理解车辆动力学优化算法;确保网络安全与可靠性;并遵循法规道德标准。多学科知识是自动驾驶核心技术的基础。
286 0
向量的内积外积与其几何意义
向量的内积外积与其几何意义
3165 0