leetcode 174 地牢遊戲(hard java 動態規劃)

 

 

思路就是

dp[i][j]表示爲了達到右下角,至少有多少血量能夠在行走過程中至少保持一滴血

要從右下角開始向上推,因爲只有在右下角知道最少還剩一滴血,然後向上推,最小血量 

java

class Solution {
    public int calculateMinimumHP(int[][] dungeon) {
        if(dungeon.length==0)
            return 0;
        int row=dungeon.length;
        int column=dungeon[0].length;
        int[][]dp = new int[row][column];
        dp[row-1][column-1]=Math.max(1,1-dungeon[row-1][column-1]);
        //先求右側邊
        for(int i=row-2;i>=0;i--){
            dp[i][column-1]=Math.max(1,dp[i+1][column-1]-dungeon[i][column-1]);
        }
        //求下側邊
        for(int j=column-2;j>=0;j--){
            dp[row-1][j]=Math.max(1,dp[row-1][j+1]-dungeon[row-1][j]);
        }
        //求中間
        for(int i=row-2;i>=0;i--){
            for(int j=column-2;j>=0;j--){
                //只能向左或者向上
                int dp_min=Math.min(dp[i+1][j],dp[i][j+1]);
                dp[i][j]=Math.max(1,dp_min-dungeon[i][j]);
            }
        }
        return dp[0][0];
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章