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];
    }
};

相关文章
|
16小时前
基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计
基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计
|
10月前
|
机器学习/深度学习 传感器 安全
【VRP问题】基于遗传算法求解带容量的车辆路径规划问题(优化目标:运输成本)附Matlab代码
【VRP问题】基于遗传算法求解带容量的车辆路径规划问题(优化目标:运输成本)附Matlab代码
|
9月前
|
机器学习/深度学习 安全
基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计(Matlab代码实现)
基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计(Matlab代码实现)
|
9月前
|
机器学习/深度学习 传感器 编解码
路径规划算法:基向量加权优化的机器人路径规划算法- 附matlab代码
路径规划算法:基向量加权优化的机器人路径规划算法- 附matlab代码
|
10月前
|
机器学习/深度学习 传感器 编解码
路径规划算法:基于纵横交叉优化的机器人路径规划算法- 附matlab代码
路径规划算法:基于纵横交叉优化的机器人路径规划算法- 附matlab代码
|
10月前
|
分布式计算 算法 定位技术
基于蚁群算法的三维路径规划算法以及蚁群算法的优化计算——TSP优化(Matlab代码实现)
基于蚁群算法的三维路径规划算法以及蚁群算法的优化计算——TSP优化(Matlab代码实现)
152 0
|
10月前
|
算法
基于蚁群算法的二维路径规划
路径规划算法是指在有障碍物的工作环境中寻找一条从起点到终点的、无碰撞地绕过所有障碍物的运动路径。路径规划算法较多,大体上可分为全局路径规划算法和局部路径规划算法两类。其中,全局路径规划方法包括位形空间法、广义锥方法、顶点图像法、栅格划归法; 局部路径规划算法主要有人工势场法等。
|
12月前
|
机器学习/深度学习 传感器 算法
【路径规划-TSP问题】基于遗传算法求解多旅行商问题不同起点和终点附matlab代码
【路径规划-TSP问题】基于遗传算法求解多旅行商问题不同起点和终点附matlab代码
|
机器学习/深度学习 存储 传感器
【路径规划】基于Lazy_Theta_star算法求解栅格地图路径规划附matlab代码
【路径规划】基于Lazy_Theta_star算法求解栅格地图路径规划附matlab代码
|
机器学习/深度学习 存储 传感器
【路径规划-栅格地图】基于Theta_star算法求解机器人路径规划附matlab代码
【路径规划-栅格地图】基于Theta_star算法求解机器人路径规划附matlab代码