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

动态规划 —— 路径问题-地下城游戏

1. 地下城游戏

题目链接:

174. 地下城游戏 - 力扣(LeetCode)icon-default.png?t=O83Ahttps://leetcode.cn/problems/dungeon-game/description/

 


2.  算法原理 

状态表示:以莫一个位置位置为结尾或者以莫一个位置为起点

   

dp[i,j]表示:到达[i,j]位置的时候,骑士所需要的最低初始健康点数(X),这个状态表示是错误的,因为如果是以莫一个位置为结尾来推导的话我们会发现我们正向推导的时候是不断的修改我们之前的状态,无法得到一个准确的状态

  

所以本题应该以莫一个位置为起点来开始推断:从[i,j]位置出发,到达终点,dp[i,j]里面存储的值就是所需的最低初始健康点数

2. 状态转移方程

  

根据最近的一步来划分问题:

   

到达dp[i][j]有两种情况:

                                        1. 往右边走:dp[i,j+1] - d[i][j]

        

                                        2. 往下走:dp[i+1,j] - d[i][j]
    

    

本题的状态转移方程是:dp[i][j] = min(dp[i,j+1]  ,dp[i+1,j]) - d[i][j]

    

因为最低健康点数还有可能为负数,那么我们还需要对它进行一次比对:

   

                                dp[i][j] =max(1,dp[i][j] )        如果为负数则返回1,否则不变

3. 初始化 :把dp表填满不越界,让后面的填表可以顺利进行

    

本题状态依赖的是下面和右边的状态,所以会越界的位置是下面的一行和右边的一列,那么我们可以在下面的一行和右边的一列再额外的加上一行和一列的虚拟节点

   

因为是在下面的一行和右边的一列加上了虚拟节点,所以不用考虑下标的映射关系,只需要保证后面的填表是正确的

    

当解救完公主之后走到下面或者右边的时候,最少要剩下1滴健康点数,其余虚拟节点的值是取最小的值,为了防止影响到最终结果,所以我们将其初始化为正无穷大

   

4. 填表顺序 

    

本题的填表顺序是:从下往上填写每一行,每一行的值是从右往左

5. 返回值 :题目要求 + 状态表示 

    

本题的返回值是:dp[0][0]


3.代码  

动态规划的固定四步骤:1.  创建一个dp表

                                        2. 在填表之前初始化

                                        3. 填表(填表方法:状态转移方程)

                                        4. 确定返回值 

class Solution {
public:int calculateMinimumHP(vector<vector<int>>& d) {int m=d.size(),n=d[0].size();//创建dp表随便将虚拟节点全部初始化为正无穷大vector<vector<int>>dp(m+1,vector<int>(n+1,INT_MAX));//再将dp[m][n-1]和dp[m-1][n]初始化为1dp[m][n-1]=dp[m-1][n]=1;for(int i=m-1;i>=0;i--)for(int j=n-1;j>=0;j--){dp[i][j]=min(dp[i+1][j],dp[i][j+1])-d[i][j];dp[i][j]=max(1,dp[i][j]);}return dp[0][0];}
};


感谢观看~ 

http://www.lryc.cn/news/474730.html

相关文章:

  • 沈阳乐晟睿浩科技有限公司抖音小店短视频时代的电商蓝海
  • ubuntu20.04安装ros与rosdep
  • 推理加速papers
  • 【02基础】- RabbitMQ基础
  • vue3中跨层传递provide、inject
  • Nacos-1.4.6升级2.3.2
  • 东识集中文印管理系统|DW-S408系统的主要功能
  • text-foreground讲解
  • 数字IC后端实现之Innovus Place跑完density爆涨案例分析
  • 【牛客刷题实战】二叉树遍历
  • 消息队列mq有哪些缺点?
  • 【CENet】多模态情感分析的跨模态增强网络
  • 动态代理:面向接口编程,屏蔽RPC处理过程
  • HTTP 405 Method Not Allowed:解析与解决
  • 推荐一款CAD/CAM设计辅助工具:Mastercam
  • 位运算刷题记录
  • 爬虫技术——小白入狱案例
  • vue 果蔬识别系统百度AI识别vue+springboot java开发、elementui+ echarts+ vant开发
  • 全新更新!Fastreport.NET 2025.1版本发布,提升报告开发体验
  • 信息学科平台系统设计与实现:Spring Boot技术手册
  • conda下jupyterlab安装问题以及交互绘图问题记录
  • 尚硅谷react教程_扩展_setState更新状态的2种写法
  • C语言编写的自动取款机模拟程序
  • 【常用数据结构】开发中常用的数据结构?
  • OCC 点云
  • 方法重写与方法重载
  • Vue3实现地球上加载柱体
  • OpenGL入门003——使用Factory设计模式简化渲染流程
  • 01_AI编程案例展示:借助AI轻松爬取海量网盘链接
  • 【机器学习导引】ch5-神经网络