LeetCode 174. 地下城游戏

£神魔★判官ぃ 2022-10-25 04:46 252阅读 0赞

在这里插入图片描述

  1. //解法一:二分+正向dp
  2. //https://leetcode-cn.com/problems/dungeon-game/solution/er-fen-cwo-te-yao-sou-bao-by-tian-xin-yue-yuan-3/
  3. class Solution {
  4. private boolean search(int[][] d, int hp){
  5. int m = d.length;
  6. int n = d[0].length;
  7. int[][] dp = new int[m + 1][n + 1];
  8. for(int i = 0; i <= m; i++)
  9. Arrays.fill(dp[i], -0x3f3f3f3f);//边界条件,从1开始,第一行上面和第一列左边都是负无穷
  10. dp[0][1] = dp[1][0] = hp;//边界条件,hp
  11. for(int i = 1; i <= m; i++){
  12. for(int j = 1; j <= n; j++){
  13. int val = Math.max(dp[i - 1][j], dp[i][j - 1]) + d[i - 1][j - 1];
  14. if(val <= 0)//没血了,别走了
  15. continue;
  16. dp[i][j] = val;
  17. }
  18. }
  19. return dp[m][n] > 0;//还有血吗
  20. }
  21. public int calculateMinimumHP(int[][] dungeon) {
  22. int l = 0;
  23. int r = 0x3f3f3f3f;
  24. int mid;
  25. while(l < r){
  26. mid = l + r >> 1;
  27. if(search(dungeon, mid)){
  28. r = mid;
  29. }else
  30. l = mid + 1;
  31. }
  32. return Math.max(l, 1);
  33. }
  34. }
  35. //解法二:逆向dp 因为
  36. //https://leetcode-cn.com/problems/dungeon-game/solution/di-xia-cheng-you-xi-by-leetcode-solution/
  37. class Solution {
  38. public int calculateMinimumHP(int[][] dungeon) {
  39. int n = dungeon.length, m = dungeon[0].length;
  40. int[][] dp = new int[n + 1][m + 1];
  41. for (int i = 0; i <= n; ++i) {
  42. Arrays.fill(dp[i], Integer.MAX_VALUE);
  43. }
  44. dp[n][m - 1] = dp[n - 1][m] = 1;
  45. for (int i = n - 1; i >= 0; --i) {
  46. for (int j = m - 1; j >= 0; --j) {
  47. int minn = Math.min(dp[i + 1][j], dp[i][j + 1]);
  48. dp[i][j] = Math.max(minn - dungeon[i][j], 1);
  49. }
  50. }
  51. return dp[0][0];
  52. }
  53. }

发表评论

表情:
评论列表 (有 0 条评论,252人围观)

还没有评论,来说两句吧...

相关阅读

    相关 174. 地下游戏

    一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔