做网站可以用海外空间吗,公司名称变更通知函,wordpress给文章添加固定字段,网页免费模板下载一些恶魔抓住了公主#xff08;P#xff09;并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士#xff08;K#xff09;最初被安置在左上角的房间里#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。
骑士的初始健康点数为一个正…一些恶魔抓住了公主P并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士K最初被安置在左上角的房间里他必须穿过地下城并通过对抗恶魔来拯救公主。
骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下他会立即死亡。
有些房间由恶魔守卫因此骑士在进入这些房间时会失去健康点数若房间里的值为负整数则表示骑士将损失健康点数其他房间要么是空的房间里的值为 0要么包含增加骑士健康点数的魔法球若房间里的值为正整数则表示骑士将增加健康点数。
为了尽快到达公主骑士决定每次只向右或向下移动一步。
编写一个函数来计算确保骑士能够拯救到公主所需的最低初始健康点数。
例如考虑到如下布局的地下城如果骑士遵循最佳路径 右 - 右 - 下 - 下则骑士的初始健康点数至少为 7。
-2 -3 3 -5 -10 1 10 30 -5
说明:
骑士的健康点数没有上限。
任何房间都可能对骑士的健康点数造成威胁也可能增加骑士的健康点数包括骑士进入的左上角房间以及公主被监禁的右下角房间。
class Solution {public int calculateMinimumHP(int[][] dungeon) {int ndungeon.length,mdungeon[0].length;int[][] dpnew int[n1][m1];//数组含义是ij到终点需要的点数for (int i0;in;i)//初始化Arrays.fill(dp[i],Integer.MAX_VALUE);dp[n][m-1]dp[n-1][m]1;for(int in-1;i0;i--)//从右下到左上-就是倒着走还原骑士的路线for(int jm-1;j0;j--)dp[i][j]Math.max(Math.min(dp[i1][j],dp[i][j1])-dungeon[i][j],1);//下一步的两种走法中所需点数少的那个-当前位置需要改变的点数如果当前位置加的点数太大则初始点数只要为1就满足了return dp[0][0];}
}