题目

https://leetcode.com/problems/dungeon-game/

题解

方法1:4个参数的递归+缓存,TLE

今日结论:转换成dp之前,递归的参数设计很重要,参数越少越好

我第一版递归有4个参数,心想,加个缓存吧,当我写出4个map嵌套的时候,内心是绝望的。。

方法2:两个参数的dp

方法 1 超时,于是看了答案的递归版本:
https://leetcode.com/problems/dungeon-game/discuss/745340/post-Dedicated-to-beginners-of-DP-or-have-no-clue-how-to-start

然后用 暴力递归->傻缓存->dp 的套路,转化成的自底向上的 dp。

class Solution {int M, N;public int calculateMinimumHP(int[][] dungeon) {M = dungeon.length;N = dungeon[0].length;int[][] dp = new int[M + 1][N + 1];// 【Solution 1】傻缓存// return process(0, 0, dungeon, dp);// 【Solution 2】dpfor (int i = 0; i <= M; i++) {dp[i][N] = Integer.MAX_VALUE;}for (int i = 0; i <= N; i++) {dp[M][i] = Integer.MAX_VALUE;}dp[M - 1][N - 1] = dungeon[M - 1][N - 1] > 0 ? 1 : 1 - dungeon[M - 1][N - 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;int p1 = dp[i + 1][j];int p2 = dp[i][j + 1];int minReq = Math.min(p1, p2) - dungeon[i][j];dp[i][j] = minReq <= 0 ? 1 : minReq;}}return dp[0][0];}// return min requirement// public int process(int i, int j, int[][] dungeon, int[][] dp) {//     if (i == M || j == N) return Integer.MAX_VALUE;//     if (dp[i][j] != 0) return dp[i][j];//     if (i == M - 1 && j == N - 1) {//         return dungeon[i][j] > 0 ? 1 : 1 - dungeon[i][j];//     } else {//         int p1 = process(i + 1, j, dungeon, dp);//         int p2 = process(i, j + 1, dungeon, dp);//         int minReq = Math.min(p1, p2) - dungeon[i][j];//         dp[i][j] = minReq <= 0 ? 1 : minReq;//         return dp[i][j];//     }// }
}

leetcode 174. Dungeon Game | 174. 地下城游戏(暴力递归->傻缓存->dp)相关推荐

  1. leetcode 877. Stone Game | 877. 石子游戏(递归/动态规划/数学解法)

    题目 https://leetcode.com/problems/stone-game/ 题解 搜了一下 stone game,结果.. 进入正题: 一开始写了个递归,超时了.没想出怎么写 dp,看了 ...

  2. 先后抽纸牌游戏 暴力递归

    题目描述: 给定一个整形数组arr,代表数值不同的纸牌排成一条线 玩家A和玩家B一次拿走每张纸牌 规定玩家A先拿,玩家B后拿 但是每个玩家每次只能只能拿走最左或者最右的纸牌 双方玩家都会使得对方在改变 ...

  3. leetcode 712. Minimum ASCII Delete Sum for Two Strings | 712. 两个字符串的最小ASCII删除和(暴力递归->傻缓存->DP)

    题目 https://leetcode.com/problems/minimum-ascii-delete-sum-for-two-strings/ 题解 经典的 暴力递归 -> 傻缓存 -&g ...

  4. leetcode 1143. Longest Common Subsequence | 1143. 最长公共子序列(动态规划,暴力递归->傻缓存->dp)

    题目 https://leetcode.com/problems/longest-common-subsequence/ 题解 经典的 暴力递归 -> 傻缓存 -> dp 题目,以 &qu ...

  5. leetcode 714. Best Time to Buy and Sell Stock with Transaction Fee | 714. 买卖股票的佳最时机含手续费(递归->傻缓存->dp)

    题目 https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/ 题解 经典的 暴力递归 - ...

  6. leetcode 55. Jump Game | 55. 跳跃游戏(暴力递归->傻缓存->DP)

    题目 https://leetcode.com/problems/jump-game/ 题解 又是经典套路,暴力递归->傻缓存->DP 没写草稿,直接看代码吧 class Solution ...

  7. leetcode 813. Largest Sum of Averages | 813. 最大平均值和的分组(暴力递归->傻缓存->DP)

    题目 https://leetcode.com/problems/largest-sum-of-averages/ 题解 好久不 dp 了,来一道快乐的 dp 保持手感. 经典的暴力递归 -> ...

  8. leetcode 646. Maximum Length of Pair Chain | 646. 最长数对链(暴力递归->傻缓存->dp)

    题目 https://leetcode.com/problems/maximum-length-of-pair-chain/description/ 题解 暴力递归->傻缓存->dp 写完 ...

  9. leetcode 62, 63, 980. Unique Paths I, II, III | 62, 63, 980. 不同路径 I, II, III(暴力递归->傻缓存->动态规划)

    62. Unique Paths https://leetcode.com/problems/unique-paths/ 注意本题只能向右 / 向上走. DP 问题,经典又熟悉. 暴力递归->傻 ...

最新文章

  1. [算法] 十个经典排序算法
  2. 导出csv文件时,处理分隔符问题(转)
  3. 玩转spring boot——结合jQuery和AngularJs
  4. Rust : codewars的Product of consecutive Fib numbers
  5. eclipse中自动生成javadoc文档的方法
  6. (4329)Ping pong
  7. 梅宫主:聊聊创业路上关于韭菜的事儿。。
  8. 19讲项目实战站内搜索页
  9. Openssl CA证书生成以及双向认证,及windows系统证书批量导出,android cer转bks
  10. C语言基础级——N维数组定义与使用
  11. 【性能测试】轻商城-项目实战3
  12. CSS进阶班笔记(五)
  13. 中国有互联网根服务器吗?
  14. python scatter参数详解_Python中scatter函数参数及用法详解
  15. 递归:昆虫繁殖C++实现
  16. twitter下载网络教程_糟糕的主意:喜p Twitter广告网络
  17. 如何打造高绩效的研发团队
  18. EASYOPS系列|谨慎!勿让持续交付变成bug自动化发布
  19. 数据库不能不了解的知识点(上)
  20. 海康大华宇视等等安防监控摄像头转成WebRTC流实现Web浏览器超低延迟无插件直播新方案...

热门文章

  1. CodeForces - 1326D2 Prefix-Suffix Palindrome (Hard version)(马拉车/回文自动机)
  2. 蓝桥杯 - 牌型种数(dfs)
  3. BOOST内存管理(二) --- boost::pool
  4. 什么代码才是线程安全的
  5. WebRTC 中的基本音频处理操作
  6. 130 道 K8s + Docker + DevOps 大厂面试题及知识点详解
  7. 重新深入理解零拷贝技术
  8. Kafka解析之topic创建(2)
  9. 设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)
  10. 『Go 语言底层原理剖析』文末送书