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

动态规划之路劲问题3

解析题目:

跟之前路径题目大概一样,从左上角到右下角,每一步只能向下或者向右,而且每次走出来血量必须大于0(注意这一点,否则容易导致每次出来可能小于0就可能错)

算法分析:

状态表示:经验+题目

以dp[i][j]为结尾,最少的健康点数

dp[i][j]:表示到达这个位置时的最少的健康点数,如果我们以这个表示我们的状态,就会发现有问题,因为这个ij位置的健康点数不仅仅受下一步(也就是往右和往下)的影响,还受后面很多个路径上的点的影响,比如以例题为例:一开始我们如果初始值为3,走完-2还剩1,那我们走不出-3和-5,如果我们初始值为6,走完-2,-3,3,1,但是到-5时变为0,所以初始值为7才是对的,所以我们ij位置不仅仅是受最近的i j-1和i-1  j位置影响,还受多个位置的值影响

这道题难就难在需要走出一个房间的健康数要大于0,证明我们上面的状态行不通

所以还有一种经验+题目

以dp[i][j]位置为起始,到终点的最少的健康点数

 状态转移方程:

根据最近的一步

dp[i][j]到达终点需要的最少的健康点数,你要求dp[i][j]到终点是不是要先求到dp[i][j+1]或dp[i+1][j] 

因为dp[i][j+1]或dp[i+1][j] 也表示那个位置到终点的最少的健康点数,所以你只要由dp[i][j]到那两个位置的最少的健康点数就行;

所以我们要比较右边和下面的两个健康点数谁最少就取谁,然后在+上我们走出dp[i][j]时所剩余的健康点数,也就是+dungeon[i][[j]

注意:当我们发现求得dp[i][j]小于0,原因在于我们dungeon[i][j]是一个很大的血包,那此时的dp[i][j]只需要1即可,

1+dungeon[i][j]-dp[i][j]>0(图示有错,dp[i][j]想表示的是dungeon[i][j])

初始化:出来要有一滴血保证最少 

返回值:dp[0][0] ;

相关文章:

  • GitHub Actions 和 GitLab CI/CD 流水线设计
  • 基于 SAFM 超分辨率上采样模块的 YOLOv12 改进方法—模糊场景目标检测精度提升研究
  • Qt开发:按钮类的介绍和使用
  • java_Lambda表达式
  • 关于算法设计与分析——拆分表交换问题
  • 学习黑客风险Risk
  • MCP 探索:browser tools MCP + Cursor 可以实现哪些能力
  • 计算机总线系统入门:理解数据传输的核心
  • 【Mytais系列】缓存机制:一级缓存、二级缓存
  • Servlet (一)
  • 18、状态库:中央魔法仓库——React 19 Zustand集成
  • 二叉树 - JS - 2
  • CGI 协议是否会具体到通讯报文?
  • 计组复习笔记 3
  • Linux 网络与操作系统核心知识体系概览(大框架)
  • linux部署的mysql数据库修改表名为小写配置
  • DeepSeek实战--蒸馏
  • STM32F103C8T6使用MLX90614模块
  • LVGL -滑动条
  • 三、shell脚本--运算符与表达式:让脚本学会“思考”
  • 熬夜又不想伤肝?方法只有一个
  • 我的诗歌阅读史
  • 辛涛任山东第一医科大学副校长,曾为“博士服务团”成员
  • 图忆|上海车展40年:中国人的梦中情车有哪些变化(下)
  • 阿根廷发生5.6级地震,震源深度30公里
  • 解放日报:服务国家战略,加快建成科技创新高地