Dungeon Game解题报告
来源:互联网 发布:ubuntu如何查看版本号 编辑:程序博客网 时间:2024/05/16 06:07
https://leetcode.com/problems/dungeon-game/
这道题我看了别人的方法,用了很久才理解。用一个二维数组保存进入该点之前,确保骑士走出该点血量大于0,且骑士能够救出公主的值。显然对于最后一个点res[m][n]=max(1,1-dungeon[m][n])。对于其他的点需要明确一点,从该点走出之后我们要去他右边或者下边的点,右边或者下边的点的值就是我们走出这个点的之后的值。即:
res[i+1][j] or res[i][j+1]=res[i][j]+dungeon[i][j]
那么res[i][j]=(res[i+1][j] or res[i][j+1]) - dungeon[i][j]
那么如何确定这个值呢?我们要保证对的是该处点的值必须大于0,而且尽可能小。
所以res[i][j]=max(1,min(res[i+1][j],res[i][j+1])-dungeon[i][j])
class Solution {public: int calculateMinimumHP(vector<vector<int>>& dungeon) { if(dungeon.size()==0||dungeon[0].size()==0) return 0; int m=dungeon.size(); int n=dungeon[0].size(); vector<vector<int> > res(m,vector<int>(n,1)); res[m-1][n-1]=max(1,1-dungeon[m-1][n-1]); for(int i=m-2;i>=0;i--){ res[i][n-1]=max(1,res[i+1][n-1]-dungeon[i][n-1]); } for(int i=n-2;i>=0;i--){ res[m-1][i]=max(1,res[m-1][i+1]-dungeon[m-1][i]); } for(int i=m-2;i>=0;i--){ for(int j=n-2;j>=0;j--){ res[i][j]=max(1,min(res[i+1][j],res[i][j+1])-dungeon[i][j]); } } return res[0][0]; }};
0 0
- Dungeon Game解题报告
- LeetCode 解题报告 Dungeon Game
- 【LeetCode】Dungeon Game 解题报告【Solution】
- [leetcode] 174. Dungeon Game 解题报告
- [Leetcode] 174. Dungeon Game 解题报告
- Dungeon Game 解题心得
- Dungeon Game | leetcode 解题思路
- poj2251:Dungeon Master解题报告
- POJ-2251 Dungeon Master 解题报告
- POJ - 2251 Dungeon Master解题报告
- USACO A Game解题报告
- USACO A Game 解题报告
- poj1753 Flip Game 解题报告
- HDU 4616 Game 解题报告
- Leetcode Jump Game 解题报告
- USACO Letter Game 解题报告
- 【LeetCode】Jump Game 解题报告
- leetcode [Nim game解题报告]
- 两款网络测速工具 Speedtest & Speedster
- Android打印图片
- Where is $HADOOP_HOME on CDH 5.X, Parcels
- JUnit 4 与 TestNG 对比
- linux磁盘配额 quota
- Dungeon Game解题报告
- android 开发 获取apk 信息和sha1值的项目
- Sendfile & Zero-copy
- java预防表单重复提交
- js中创建、添加、删除、移动、复制和查找(子)节点
- 占位
- Java 抽象类与接口的联系和区别
- frp配置本地服务端口到服务器80端口
- 如何更改润乾报表锁定表头时的滚动条样式