题目
分析过程
1.这道题还是要用到动态规划,但是与之前的有些不同,如果从最大收益正向考虑时,会产生三个储存时间,而且不是简单的在最后加一个判断条件,勇士在中间也必须保持正血量,因此行不通,就算实现了,时间复杂度也过高。
2.采用倒推的方法,根据题意要救出公主,从公主的位置出发,若公主当前位置为正,则勇士健康值最少为1,若为负,则需要上一步dp-当前格数值
3.用dp[i][j] 表示从坐标 (i,j) 到终点所需的最小初始值,在一般情况下,我们只需要关注向右和向上这两者健康点最小值
给出动态规划方程
dp[i][j]=max(min(dp[i+1][j],dp[i][j+1])−dungeon(i,j),1)
代码
func calculateMinimumHP(dungeon [][]int) int {
n := len(dungeon)
m := len(dungeon[0]) //读取网格数
dp :=