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

相关文章
|
机器学习/深度学习 传感器 编解码
路径规划算法:基于秃鹰优化的机器人路径规划算法- 附matlab代码
路径规划算法:基于秃鹰优化的机器人路径规划算法- 附matlab代码
|
机器学习/深度学习 传感器 算法
路径规划算法:基于正余弦优化的机器人路径规划算法- 附matlab代码
路径规划算法:基于正余弦优化的机器人路径规划算法- 附matlab代码
|
机器学习/深度学习 传感器 算法
路径规划算法:基于指数分布优化的机器人路径规划算法- 附matlab代码
路径规划算法:基于指数分布优化的机器人路径规划算法- 附matlab代码
|
机器学习/深度学习 传感器 编解码
路径规划算法:基于蛇优化的机器人路径规划算法- 附matlab代码
路径规划算法:基于蛇优化的机器人路径规划算法- 附matlab代码
|
机器学习/深度学习 传感器 编解码
路径规划算法:基向量加权优化的机器人路径规划算法- 附matlab代码
路径规划算法:基向量加权优化的机器人路径规划算法- 附matlab代码
|
算法 机器人
基于改进PSO-ABC算法的机器人路径规划(Matlab代码实现)
基于改进PSO-ABC算法的机器人路径规划(Matlab代码实现)
109 0
|
机器学习/深度学习 传感器 编解码
路径规划算法:基于纵横交叉优化的机器人路径规划算法- 附matlab代码
路径规划算法:基于纵横交叉优化的机器人路径规划算法- 附matlab代码
|
算法
利用Astar算法实现飞行轨迹的三维路径规划(基于Matlab代码实现)
利用Astar算法实现飞行轨迹的三维路径规划(基于Matlab代码实现)
250 0
|
机器学习/深度学习 传感器 编解码
路径规划算法:基于平衡优化的机器人路径规划算法- 附matlab代码
路径规划算法:基于平衡优化的机器人路径规划算法- 附matlab代码
|
机器学习/深度学习 传感器 编解码
路径规划算法:基于差分进化优化的机器人路径规划算法- 附matlab代码
路径规划算法:基于差分进化优化的机器人路径规划算法- 附matlab代码