LeetCode Dungeon Game
来源:互联网 发布:省市区四级联动数据库 编辑:程序博客网 时间:2024/06/06 10:44
起初我是这样定义dp的。dp[i][j]表示从(0,0)到(i,j)需要的最少血量,那么有,
dp[i][j]=min(dp[i-1][j],dp[i][j-1])-dungeon[i][j];
大家可以想想这个方程对吗?
给这么一组数据 -3,2
那么我走到-3需要hp=4,那么走到2需要hp反而变少了,变成了2?试问我用hp等于2出发,连-3都过不了!
所以这样的方程明显错误。
换一种想法,如果我定义dp[i][j]]为从i,j走到终点的最少血量,那么有
dp[i][j]=min(dp[i+1][j],dp[i][j+1])-dungeon[i][j];
假如我知道dp[i+1][j]和dp[i][j+1],然后保证走完dp[i][j]后的hp值能走这个两个值的较小的那个,那么dp[i][j]就可以求出来了,不过需要注意一点的是,假如dp[i][j]<0,那么有dp[i][j]=0,因为hp不能取负值,最后结果是dp[0][0]+1。
dp[i][j]=min(dp[i-1][j],dp[i][j-1])-dungeon[i][j];
大家可以想想这个方程对吗?
给这么一组数据 -3,2
那么我走到-3需要hp=4,那么走到2需要hp反而变少了,变成了2?试问我用hp等于2出发,连-3都过不了!
所以这样的方程明显错误。
换一种想法,如果我定义dp[i][j]]为从i,j走到终点的最少血量,那么有
dp[i][j]=min(dp[i+1][j],dp[i][j+1])-dungeon[i][j];
假如我知道dp[i+1][j]和dp[i][j+1],然后保证走完dp[i][j]后的hp值能走这个两个值的较小的那个,那么dp[i][j]就可以求出来了,不过需要注意一点的是,假如dp[i][j]<0,那么有dp[i][j]=0,因为hp不能取负值,最后结果是dp[0][0]+1。
代码如下:
int dp[1001][1001];int min(int x,int y){return x<y?x:y;}class Solution {public: int calculateMinimumHP(vector<vector<int> > &dungeon) { int i,j; int n=dungeon.size();int m=dungeon[0].size();if(dungeon[n-1][m-1]<0) dp[n-1][m-1]=-dungeon[n-1][m-1];else dp[n-1][m-1]=0;for(i=n-2;i>=0;i--){dp[i][m-1]=dp[i+1][m-1]-dungeon[i][m-1];if(dp[i][m-1]<0)dp[i][m-1]=0;}for(j=m-2;j>=0;j--){dp[n-1][j]=dp[n-1][j+1]-dungeon[n-1][j];if(dp[n-1][j]<0)dp[n-1][j]=0;}for(i=n-2;i>=0;i--)for(j=m-2;j>=0;j--){dp[i][j]=min(dp[i+1][j],dp[i][j+1])-dungeon[i][j]; if(dp[i][j]<0) dp[i][j]=0;}return dp[0][0]+1; }};
0 0
- [leetcode] Dungeon Game
- leetcode 174: Dungeon Game
- [leetcode 174] Dungeon Game
- [leetcode] Dungeon Game
- Leetcode Dungeon Game
- LeetCode Dungeon Game
- LeetCode: Dungeon Game
- [LeetCode] Dungeon Game
- [leetcode] Dungeon Game
- LeetCode Dungeon Game
- [LeetCode]Dungeon Game
- Leetcode OJ Dungeon Game
- Leetcode: Dungeon Game
- leetcode dungeon game
- [leetcode]Dungeon Game
- LeetCode(174) Dungeon Game
- LeetCode 174 Dungeon Game
- LeetCode - Dungeon Game
- Innodb行锁源码学习(一)
- Process of Linux
- PHP学习笔记之九九乘法表
- Swing日期时间选择框控件
- 实习篇---第四十五天
- LeetCode Dungeon Game
- Android界面布局的简单介绍
- 界面间的传值
- Lua笔记-string
- Linux显示按文件大小降序排列
- Vmware 安装 Fedora 20 注意事项
- 如何解决Verilog中参数化的赋值:赋全0,赋全1,赋全Z,赋全x
- 2014年,大数据落地在即;2015年,大数据更上一层楼
- 2015.1.28号工作日志