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

       分析:逆向dp

    class Solution {
        public int calculateMinimumHP(int[][] dungeon) {
            if(dungeon.length == 0 || dungeon[0].length == 0) return 0;
            int m = dungeon.length, n = dungeon[0].length;
            int[][] dp = new int[m][n];
            dp[m-1][n-1] = dungeon[m-1][n-1] <= 0 ? -dungeon[m-1][n-1] + 1 : 1;
            for(int i = m - 2; i >= 0; i--) {
                dp[i][n-1] = dp[i+1][n-1] <= dungeon[i][n-1] ? 1 : dp[i+1][n-1] - dungeon[i][n-1]; 
            }
            for(int i = n - 2; i >= 0; i--) {
                dp[m-1][i] = dp[m-1][i+1] <= dungeon[m-1][i] ? 1 : dp[m-1][i+1] - dungeon[m-1][i]; 
            }
            for(int i = m - 2; i >= 0; i--) {
                for(int j = n - 2; j >= 0; j--) {
                    dp[i][j] = Math.min(dp[i+1][j],dp[i][j+1]) <= dungeon[i][j] ? 1 : Math.min(dp[i+1][j],dp[i][j+1]) - dungeon[i][j];
                }
            }
            return dp[0][0];
        }
    }

      优化空间复杂度

    class Solution {
        public int calculateMinimumHP(int[][] dungeon) {
            if(dungeon.length == 0 || dungeon[0].length == 0) return 1;
            int m = dungeon.length, n = dungeon[0].length;
            int[] dp = new int[n+1];
            Arrays.fill(dp,Integer.MAX_VALUE); // 注意 应该初始化为上一个状态的值
                                        //因为dp[i]由上一状态的dp[i]以及本次跟新的dp[i+1]得到
                                    // 对于最开始的情况上一状态都应初始化为最大值,本次更新结果才可由dp[i+1]得到
            dp[n-1] = dungeon[m-1][n-1] >= 0 ? 1 : -dungeon[m-1][n-1] + 1;
            for(int i = m-1; i >= 0; i--) {  // 逆向跟新
                for(int j = n-1; j >= 0; j--) {
                    if(i == m - 1 && j == n - 1) continue;
                    dp[j] = Math.min(dp[j],dp[j+1]) - dungeon[i][j] <= 0 ? 1 : 
                    Math.min(dp[j],dp[j+1]) - dungeon[i][j];
                }
            }
            return dp[0];
        }
    }
  • 相关阅读:
    MySQL开启general_log并设置路径
    mysql日志文件开启及详解:General_log 和 Binlog
    mysql binary like_MYSQL的binary解决mysql数据大小写敏感问题的方法
    分布式系统回滚机制
    ubuntu 后台运行的几种方法!
    ubuntu磁盘分配和挂载
    .NET Core SDK在Windows系统安装后出现Failed to load the hostfxr.dll等问题的解决方法
    数组.html
    温习
    for练习.html
  • 原文地址:https://www.cnblogs.com/yonezu/p/13288119.html
Copyright © 2011-2022 走看看