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

骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。

有些房间由恶魔守卫,因此骑士在进入这些房间时会失去健康点数(若房间里的值为负整数,则表示骑士将损失健康点数);其他房间要么是空的(房间里的值为 0),要么包含增加骑士健康点数的魔法球(若房间里的值为正整数,则表示骑士将增加健康点数)。

为了尽快到达公主,骑士决定每次只向右或向下移动一步。

编写一个函数来计算确保骑士能够拯救到公主所需的最低初始健康点数。

例如,考虑到如下布局的地下城,如果骑士遵循最佳路径 右 -> 右 -> 下 -> 下,则骑士的初始健康点数至少为 7。
-2 (K)     -3     3
-5     -10     1
10     30     -5 (P)

说明:

骑士的健康点数没有上限。
    任何房间都可能对骑士的健康点数造成威胁,也可能增加骑士的健康点数,包括骑士进入的左上角房间以及公主被监禁的右下角房间。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/dungeon-game
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

int calculateMinimumHP(int** dungeon, int dungeonSize, int* dungeonColSize){if(dungeonSize<=0)return -1;int row_size=dungeonSize;int col_size=dungeonColSize[0];int **HP_state=(int **)malloc(sizeof(int *)*row_size);for(int i=0;i<row_size;i++){HP_state[i]=(int *)calloc(col_size,sizeof(int));}HP_state[row_size-1][col_size-1]=dungeon[row_size-1][col_size-1]>=0?0:dungeon[row_size-1][col_size-1];for(int i=row_size-2;i>=0;i--){HP_state[i][col_size-1]=dungeon[i][col_size-1]+HP_state[i+1][col_size-1];HP_state[i][col_size-1]=HP_state[i][col_size-1]>=0?0:HP_state[i][col_size-1];}for(int i=col_size-2;i>=0;i--){HP_state[row_size-1][i]=dungeon[row_size-1][i]+HP_state[row_size-1][i+1];HP_state[row_size-1][i]=HP_state[row_size-1][i]>=0?0:HP_state[row_size-1][i];}for(int i=row_size-2;i>=0;i--){for(int j=col_size-2;j>=0;j--){HP_state[i][j]=HP_state[i+1][j]>HP_state[i][j+1]?HP_state[i+1][j]+dungeon[i][j]:HP_state[i][j+1]+dungeon[i][j];HP_state[i][j]=HP_state[i][j]>=0?0:HP_state[i][j];}}int ret=HP_state[0][0]>=0?1:(-1)*HP_state[0][0]+1;for(int i=0;i<row_size;i++){free(HP_state[i]);}free(HP_state);return ret;
}

执行用时 :12 ms, 在所有 C 提交中击败了75.00% 的用户

内存消耗 :8.2 MB, 在所有 C 提交中击败了100.00%的用户

NO.174 地下城游戏相关推荐

  1. 力扣174. 地下城游戏

    力扣174. 地下城游戏 文章目录 力扣174. 地下城游戏 一.题目描述 二.分析 三.完整代码 一.题目描述 二.分析 这个题一看就可以用动态规划,就需要确定动态规划的状态和选择以及状态转移方程 ...

  2. leetcode 思路——64. 最小路径和——174. 地下城游戏

    leetcode 思路--64. 最小路径和--174. 地下城游戏 64. 最小路径和 174. 地下城游戏 64. 最小路径和 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角 ...

  3. [算法]LeetCode每日一题--174. 地下城游戏(Java)

    DailyChallenge 174. 地下城游戏 Hard20200712 Description 一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格. ...

  4. Java实现 LeetCode 174 地下城游戏

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

  5. 174. 地下城游戏(Dungeon Game)

    174. 地下城游戏(Dungeon Game) 题解 动态规划 复杂度分析 Python Java(待完成) 题解 动态规划 dp[i][j]dp[i][j]dp[i][j]表示到达房间dungeo ...

  6. 力扣——174.地下城游戏(困难难度)——万能的递归与动态分析

    力扣--174. 地下城游戏 一.算法目录合集 1.地址 2.说明 二.题目说明 1.题干 2.原地址 三.实现步骤 1.思路分析 1.1.分析问题 1.2.具体步骤 ① 特殊情况分析 ② 常规分析 ...

  7. 力扣 -- 174. 地下城游戏

    题目链接:174. 地下城游戏 - 力扣(LeetCode) 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴. 参考代码: class Solution { ...

  8. 174.地下城游戏(难)

    目录 一.题目 二.分析+代码 方法一:先初始化最后一列和最后一行 方法二:多加一行和一列 一.题目 174. 地下城游戏 - 力扣(LeetCode) 二.分析+代码 方法一:先初始化最后一列和最后 ...

  9. LeetCode 174.地下城游戏

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

  10. [力扣题解] 174. 地下城游戏 DP

    一.题目详情 原题链接:174. 地下城游戏 一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿 ...

最新文章

  1. HDU 4539郑厂长系列故事――排兵布阵(状压DP)
  2. 使用Zuul和Spring Boot创建API网关
  3. 大数据就业前景分析的太到位了【附:1T视频资料】
  4. C++笔记-设置cout输出数据的宽度和填充
  5. 【英语学习】【Daily English】U06 Shopping L02 What's the size?
  6. JUnit单元测试的几个规律总结
  7. Android——Fragment的使用(上)
  8. 什么是区块链――区块链的分布式数据库、共识机制
  9. day034 锁,信号量,事件,队列,子进程与子进程通信,生产者消费者模型,joinableQueue...
  10. Python——类的实例
  11. 吉吉影音官网版 v2.7.2.8_p2p播放器​
  12. Scratch少儿编程与游戏:圣骑士之魔法森林
  13. 【前端静态资源托管库-CDN】BootCDN资源全线失效
  14. 解决File Cache Conflict
  15. 跨域 CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR
  16. spark task 任务状态管理
  17. 一线城市,一个人打拼更不易
  18. 【沧小海笔记】之基于FPGA的以太网设计相关知识——第三章 xilinx 三速以太网IP核(TEMAC)的介绍
  19. 如何正确安装朗文英文当代大词典(2CD版)
  20. Linux文件上传下载,rz和sz

热门文章

  1. 特斯拉又”降价“,12月推出现车保险补贴4000元
  2. Qt基础之三十五:Qt中文乱码探索
  3. 404 Note Found· 第七次作业 - 需求分析报告
  4. matlab函数randperm()
  5. JavaWeb-简易购书系统使用Bootstrap
  6. 决策树后剪枝算法(一)代价复杂度剪枝CPP
  7. 〖机器学习白板推导1〗样本均值样本方差PCA!
  8. 基于Python的人机交互的五子棋博弈树搜索
  9. 从Authy中导出账户和secret
  10. android 记录美剧观看进度,TVShow Time app-最爱的美剧回归了,你一定还需要这个#iOS #Android...