Leetcode.174 Dungeon Game |算法解析——动态规划

本文分析了LeetCode上的Dungeon Game问题,骑士需要从左上角到达右下角,路径中房间可能增加或减少生命值。通过算法解析,指出初始健康值的最小值应从终点反向计算,采用动态规划方法,避免广搜的高复杂度。关键在于从终点开始,计算到达每个位置所需的最小生命值,并与当前位置值比较更新状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题:

The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dungeon. The dungeon consists of M x N rooms laid out in a 2D grid. Our valiant knight (K) was initially positioned in the top-left room and must fight his way through the dungeon to rescue the princess.

The knight has an initial health point represented by a positive integer. If at any point his health point drops to 0 or below, he dies immediately. 

Some of the rooms are guarded by demons, so the knight loses health (negative integers) upon entering these rooms; other rooms are either empty (0's) or contain magic orbs that increase the knight's health (positive integers).

In order to reach the princess as quickly as possible, the knight decides to move only rightward or downward in each step.

Write a function to determine the knight’s minimum initial health so that he is able to rescue the princess.

For example, given the dungeon below, the initial health of the knight must be at least 7 if he follows the optimal path RIGHT-> RIGHT -> DOWN -> DOWN.

=======================================

原题给出来的数据

题目分析

该题目大意是让一个骑士去地牢拯救骑士掉血,有一些房间可以回血。并且在这题中骑士只能向下和向右走这个题目就是要找到从起点(左上角)到公主(右下角)之间最小代价路径。

算法分析

我一开始做也没有多想,直接写了一个广搜的算法,但是在一些数量很大的时候就超时了,因为复杂度为O(2^n),然后我想了一下这应该是要用动态规划来优化。但是我又想少了,我是从起点开始使用动态规划,但是这样有一个问题,就是这样选择的路径是当前最优而不是全局最优,也就是有点贪心算法,所以导致有一些数据过不了,比如:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值