动态规划——达拉崩吧

1、题目链接

174. 地下城游戏

2、题目分析 

        假如说我们正向推状态转移方程,很难推出来,因为这道题有“加血”的说法,只能依靠后面的值判断前面所需要的血量,也就是说,如果正向的dp表示从起点出发,到达(i,j)需要最少的血量,那么[i][j+1]也会影响dp[i][j]的值,所以不建议正向dp的做法,

dp[i][j]表示从[i][j]位置到终点的所需要的最低健康值,

假设dp[i][j]所需的最低健康值是x,那么他满足 

x+dungeon[i][j]>=dp[i+1][j]或者

x+dungeon[i][j]>=dp[i][j+1]

那么状态转移方程就是 dp[i][j]=min(dp[i+1][j],dp[i][j+1])-dungeon[i][j]

但是当前的位置dungeon[i][j]是一个比较大的正数时,dp[i][j]的值可能会变为0或者负数,但是我们要求dp[i][j]最小为1,所以我们可以这样写:

dp[i][j] = max(1, dp[i][j])
 

 状态转移方程出来了,剩下的就简单了

倒序dp: 

3、代码实现

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][n - 1] = dp[m - 1][n] = 1;// dp[i][j]表示从当前位置出发到达终点时所需的最低健康数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]) - dungeon[i][j];dp[i][j] = max(1, dp[i][j]);}return dp[0][0];}
};

 注意我们的dp数组,要多开一行和一列,并初始化,方便我们dp[i][j]的计算

 dp[m][n - 1] = dp[m - 1][n] = 1;

在dp表最后⾯添加⼀⾏,并且添加⼀列后,所有的值都先初始化为⽆穷⼤,然后让 

dp[m][n - 1] = dp[m - 1][n] = 1即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/30996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【人工智能,机器学习,统计学习,科学表征】开源商用与研发合作

个体工户linjing-lab托管在Github&#xff0c;现公开招募商用与合作人员&#xff0c;目标人群分为以下几个方向&#xff1a; 数学、信息科学、计算机专业的大学高年级学生&#xff0c;熟悉C和面向对象模型&#xff0c;擅长Pybind11编译算子到Python环境。26岁以下的大学本科毕…

Srouce Insight 4出现乱码

今天用SI4打开一个工程文件&#xff0c;一打开发现注释全是乱码。中文全部看不出来&#xff0c;英文和数字可以看得出来。 那是因为中文的编码格式不算特别兼容。所以需要调整编码格式。 于是我在这里调整了编码格式&#xff1a; 找到菜单的Options-Preferences里面的Files 调…

【Android面试八股文】Kotlin内置标准函数let的原理是什么?

确实,let 函数在 Kotlin 中被广泛使用,特别是在处理可空类型或者需要在对象上执行一系列操作后返回结果的场景中非常有用。 let 函数的源代码 /*** Calls the specified function [block] with `this` value as its argument and returns its result.** For detailed usage i…

Kubernetes容器运行时:Containerd vs Docke

容器化技术笔记 Kubernetes容器运行时&#xff1a;Containerd vs Docke - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this arti…

Python 获取class_name win32gui

win32gui 是 Python 的一个扩展库&#xff0c;它提供了对 Windows GUI API 的访问&#xff0c;允许你编写脚本来与 Windows 桌面应用程序进行交互。以下是 win32gui 库的一些常用属性和方法6466677073&#xff1a; 常用方法 FindWindow: 根据窗口类名和窗口名获取窗口句柄。 …

数据可视化实验五:seaborn绘制进阶图形

目录 一、绘制动态轨迹图 1.1 代码实现 1.2 绘制结果 二、使用seaborn绘制关系图 2.1 绘制散点图分析产品开发部已离职的员工的评分与平均工作时间 2.1.1 代码实现 2.1.2 绘制结果 ​编辑 2.2 基于波士顿房价数据&#xff0c;绘制房间数和房屋价格的折线图 2.2.1 代码…

vscode用vue框架写一个登陆页面

目录 一、创建登录页面 二、构建好登陆页面的路由 三、编写登录页代码 1.添加基础结构 2.给登录页添加背景 3.解决填充不满问题 4.我们把背景的红颜色替换成背景图&#xff1a; 5.在页面中央添加一个卡片来显示登录页面 6.设置中间卡片页面的左侧 7.设置右侧的样式及…

springBoot+mongoDB项目中,使用MongoFactory、MongoTemplate分页条件查询,增删查改

MongoDB:CRUD 添加删除修改条件查询分页条件查询 只展示实现类代码 添加 Autowiredprivate MongoTemplate mongoTemplate;Autowiredprivate MongoFactory mongoFactory;Overridepublic boolean saveEntity(entityForm form) {try {实体类 en new 实体类();en.setName(form.ge…

【深度学习】GELU激活函数是什么?

torch.nn.GELU 模块在 PyTorch 中实现了高斯误差线性单元&#xff08;GELU&#xff09;激活函数。GELU 被用于许多深度学习模型中&#xff0c;包括Transformer&#xff0c;因为它相比传统的 ReLU&#xff08;整流线性单元&#xff09;函数能够更好地近似神经元的真实激活行为。…

vue小总结

知识总结 【 1 】es6 语法总结 # let 定义变量 # const定义常量 ------块级作用域---- # var 以后尽量少用&#xff0c;函数作用域var 在 JavaScript 中是函数作用域或全局作用域。而 let 和 const 是块级作用域。 // 使用 var 声明全局变量 var globalVar "Im a globa…

【全网最全最详细】RabbitMQ面试题

一、说下RabbitMQ的架构大致是什么样的&#xff1f; RabbitMQ是一个开源的消息中间件&#xff0c;用于在应用程序之间传递消息。它实现了AMQP&#xff08;高级消息队列协议&#xff09;并支持其它消息传递协议&#xff0c;例如STOMP&#xff08;简单文本定向消息协议&#xff…

一段代码让你了解Java中的抽象

我们先来看一道题&#xff01; 计算几何对象的面积之和&#xff09;编写一个方法&#xff0c;该方法用于计算数组中所有几何对象的面积之和。该方法的签名是&#xff1a; public static double sumArea(GeometricObject[] a) 编写一个测试程序&#xff0c;该程序创建一个包含四…

Linux环境编程基础学习2

For循环累加求和&#xff0c;两种方式&#xff0c;c方式的运算更快 打开文件操作 cat操作的实现 EOF: 1.diff A B比较两个文件是否一样&#xff0c;一样则什么结果都没有 Od -c 文件名可以显示出文件中的不可见字符

ES6及更新版本的新特性

数组解构 在数组解构中&#xff0c;我们可以直接从数组中提取元素&#xff0c;并将其赋值给预先定义好的变量。这种方式可以减少使用索引来访问数组元素的需要。 const [a, b, c] [1, 2, 3]; // 这里我们定义了三个变量a, b, c。数组解构会自动将数组中的元素按照顺序赋值给…

B站广告开户投流是什么政策?要哪些资质?

B站&#xff08;哔哩哔哩&#xff09;作为年轻人喜爱的视频分享社区&#xff0c;其广告价值也日益凸显。为了更好地服务广告主&#xff0c;B站近日对广告开户投流政策进行了更新&#xff0c;云衔科技作为专业的数字营销服务商&#xff0c;也积极响应&#xff0c;为广告主提供一…

绿茶集团重启IPO:流量渐退、业绩波动,还能讲出好故事吗?

近日&#xff0c;绿茶集团有限公司(下称“绿茶集团”)向港交所递交上市申请&#xff0c;花旗、招银国际为其联席保荐人。 回望绿茶集团的上市之路&#xff0c;可谓有诸多坎坷。该公司于2021年3月首度向港交所发起冲击&#xff0c;但却将中文版招股书中的“流动负债总额”错写成…

使用VS创建Linux项目,并远程连接Linux

目录 一&#xff0c;用VS创建Liunx项目 二&#xff0c;远程连接Linux系统 三&#xff0c;注意事项 四&#xff0c;成功示例&#xff0c;出现自己连接的主机 五&#xff0c;ssh参考命令 一&#xff0c;用VS创建Liunx项目 点击工具&#xff0c;选择选项 点击跨平台&#xff…

Navicat和SQLynx功能比较三(数据导出:使用MySQL近千万数据测试)

数据导出的功能在数据库管理工具中是最普遍的功能之一。所以数据导出的功能稳定性和性能也是数据库管理工具是否能很好地满足应用需求的一个考虑因素。 目录 1. 整体比较 2. 示例 2.1 前置环境 2.2 Navicat导出 2.3 SQLynx导出 2.4 性能对比结果&#xff08;690万行数据&…

商超仓库管理系统

摘要 随着全球经济和互联网技术的快速发展&#xff0c;依靠互联网技术的各种管理系统逐渐应用到社会的方方面面。各行业的有识之士都逐渐开始意识到过去传统的人工管理模式已经逐渐成为企业发展的绊脚石&#xff0c;不再适应现代企业的发展需要。企业想要得到更好的发展&#…

ES中下载ik解决版本不一致问题

1.链接&#xff1a; https://github.com/infinilabs/analysis-ik/releases/tag/v7.17.7 2.我的ES版本是7.17.9 但是Ik没有7.19&#xff0c;只有7.17 3.下载之后创建ik&#xff0c;然后把下载的导入进去&#xff1a; 4.因为版本不一致 我们修改 把所有的7.17.7改为7.17.9然…