zoukankan      html  css  js  c++  java
  • LeetCode 174. 地下城游戏

    题目链接

    174. 地下城游戏

    题目分析

    今天做题翻车了,从左上角往右下走考虑的cases好多,直接没做出来翻车。后来看了评论区才得出下面的答案。。
    我们从右下角开始做会比较容易理解了,dp[i][j]代表进入dungeon[i][j]的地方需要的最小生命值。
    我们这个最小生命值其实取决于其(右侧和下方的最小生命值)-dungeon[i][j]和1比较的较大值。
    和1比较主要是如果这个房间如果是正数,是可以加血的,我们进这个房间只需要最小的生命值即可(题目说最小生命值为1,小于等于0就会立刻死亡)
    然后我们只需要对终点和两个编辑情况进行单独判断即可。

    代码实现

    class Solution {
        public int calculateMinimumHP(int[][] dungeon) {
            int row=dungeon.length;
            int col=dungeon[0].length;
            //这个数组表示在i,j位置骑士需要的最小生命值
            int[][] dp=new int[row][col];
            for(int i=row-1;i>=0;i--){
            	for(int j=col-1;j>=0;j--){
            		if(i==row-1&&j==col-1){ //终点的情况
            			dp[i][j]=Math.max(1, 1-dungeon[i][j]);
            		}else if(i==row-1){ //最后一行的情况
            			dp[i][j]=Math.max(1, dp[i][j+1]-dungeon[i][j]);
            		}else if(j==col-1){ //最后一列的情况
            			dp[i][j]=Math.max(1, dp[i+1][j]-dungeon[i][j]);
            		}else{	
            			dp[i][j]=Math.max(1, Math.min(dp[i+1][j],dp[i][j+1])-dungeon[i][j]);
            		}
            	}
            }
            return dp[0][0];
        }
    }
    
  • 相关阅读:
    CF 319C
    日常---区域赛临近
    poj 3728 The merchant 倍增lca求dp
    zoj 3742 Delivery 好题
    zoj 3717 Balloon 2-sat
    CF 163E. e-Government ac自动机+fail树+树状数组
    CF 335B
    hdu 4739 状压DP
    hdu 4738 桥
    Hibernate中的继承映射
  • 原文地址:https://www.cnblogs.com/ZJPaang/p/13289551.html
Copyright © 2011-2022 走看看