Back to Leetcode

Readme

Dynamic_Programming/2214.Minimum-Health-to-Beat-Game/Readme.md

latest677 B
Original Source

2214.Minimum-Health-to-Beat-Game

我们用dp0[i]表示通过第i关时仍未使用盔甲能够存留的最大血量,dp1[i]表示通过第i关时已经使用盔甲能够存留的最大血量,于是转移方程就是

dp0[i] = dp0[i] - damage[i];
dp1[i] = max(dp1[i] - damage[i], dp0[i] - max(0, damage[i]-armor));

我们假设初始血量是0,模拟走一遍上面的流程。由此,max(dp0[i], dp1[i])表示的就是通过第i关所能存留的最大血量。

要保证在通过的过程中的最大血量始终都大于0,那么就观察所有max(dp0[i], dp1[i])里的最低点,通过加上这个offset来保证全程的血量都不低于1.