leetcode 日经贴,Cpp code -Dungeon Game
来源:互联网 发布:邹城农村淘宝网点查询 编辑:程序博客网 时间:2024/06/04 18:40
Dungeon Game
//very slow
class Solution {public: bool can(const vector<vector<int> > &dungeon, int v) { int n = dungeon.size(); int m = dungeon[0].size(); vector<vector<int> > td = dungeon; if (td[0][0] + v <= 0) return false; td[0][0] += v; int mm = -(1<<20); for (int j = 1; j < m; ++j) { if (td[0][j - 1] > 0 && td[0][j - 1] + td[0][j] > 0) { td[0][j] += td[0][j - 1]; } else { td[0][j] = mm; } } for (int i = 1; i < n; ++i) { if (td[i - 1][0] > 0 && td[i - 1][0] + td[i][0] > 0) { td[i][0] += td[i - 1][0]; } else { td[i][0] = mm; } } for (int i = 1; i < n; ++i) { for (int j = 1; j < m; ++j) { int v1 = mm, v2 = mm; if (td[i - 1][j] > 0 && td[i - 1][j] + td[i][j] > 0) { v1 = td[i - 1][j] + td[i][j]; } if (td[i][j - 1] > 0 && td[i][j - 1] + td[i][j] > 0) { v2 = td[i][j - 1] + td[i][j]; } td[i][j] = max(v1, v2); } } return td[n - 1][m - 1] > 0; } int calculateMinimumHP(vector<vector<int> > &dungeon) { int n = dungeon.size(); if (n == 0) return 1; int m = dungeon[0].size(); if (m == 0) return 1; int low = 1, high = -1, mid = -1; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (dungeon[i][j] < 0) { high += dungeon[i][j]; } } } high = -high; while (low < high) { int mid = (low + high) / 2; if(can(dungeon, mid)) { high = mid; } else { low = mid + 1; } } return high; }};
//dp[i][j] mean the minimun value needed to reach (n-1, m-1) from (i, j)class Solution {public: int calculateMinimumHP(vector<vector<int> > &dungeon) { int n = dungeon.size(); if (n == 0) return 1; int m = dungeon[0].size(); if (m == 0) return 1; vector<vector<int> > dp; dp.resize(n); for (int i = 0; i < n; ++i) { dp[i].resize(m); } dp[n - 1][m - 1] = max(1, 1 - dungeon[n - 1][m - 1]); for (int i = n - 1; i >= 0; --i) { for (int j = m - 1; j >= 0; --j) { if (i == n - 1 && j == m - 1) continue; if (i == n - 1) { dp[i][j] = max(1, dp[i][j + 1] - dungeon[i][j]); } else if (j == m - 1) { dp[i][j] = max(1, dp[i + 1][j] - dungeon[i][j]); } else { dp[i][j] = max(1, min(dp[i][j + 1], dp[i + 1][j]) - dungeon[i][j]); } } } return dp[0][0]; }};
0 0
- leetcode 日经贴,Cpp code -Dungeon Game
- leetcode 日经贴,Cpp code -Dungeon Game
- Leetcode 174. Dungeon Game (Hard) (cpp)
- [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
- IOS团队开发中SVN的搭建及使用
- 认识shell
- OC中的方法与函数的区别
- 双循环打印奇偶菱形
- 长度扩展攻击
- leetcode 日经贴,Cpp code -Dungeon Game
- 编程作业 第一、二章【合】
- 网游服务器端设计思考:心跳设计
- 数据结构之链表
- Static
- mui 安卓返回事件
- extjs4.2弹出层问题
- python 多维数组相加
- hdoj.1695 GCD【莫比乌斯反演】 2015/04/14