Kaidul

12333

Oct 30th, 2016
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 0 0
  1. class Solution {
  2.     bool canCross(int indx, int unit, vector<int>& stones, unordered_map<int, int>& stoneMap, vector<vector<bool>>& visited, vector<vector<bool>>& dp) {
  3.         if(indx == stones.size() - 1) {
  4.             return true;
  5.         }
  6.         if(indx >= stones.size()) {
  7.             return false;
  8.         }
  9.         if(visited[indx][unit]) {
  10.             return dp[indx][unit];
  11.         }
  12.         bool isPossible = false;
  13.         if(stoneMap[stones[indx] + unit + 1]) {
  14.            int nextIndx = stoneMap[stones[indx] + unit + 1] - 1;
  15.            isPossible |= canCross(nextIndx, unit + 1, stones, stoneMap, visited, dp);
  16.         }
  17.         if(indx > 0) {
  18.             if(stoneMap[stones[indx] + unit]) {
  19.                int nextIndx = stoneMap[stones[indx] + unit] - 1;
  20.                isPossible |= canCross(nextIndx, unit, stones, stoneMap, visited, dp);
  21.             }
  22.             if(stoneMap[stones[indx] + unit - 1]) {
  23.                int nextIndx = stoneMap[stones[indx] + unit - 1] - 1;
  24.                isPossible |= canCross(nextIndx, unit - 1, stones, stoneMap, visited, dp);
  25.             }
  26.         }
  27.         visited[indx][unit] = true;
  28.         return dp[indx][unit] = isPossible;
  29.     }
  30.    
  31. public:
  32.     bool canCross(vector<int>& stones) {
  33.         int n = stones.size();
  34.         const int MAX_UNIT = 100;
  35.         vector<vector<bool>> dp(n, vector<bool>(MAX_UNIT, false));
  36.         vector<vector<bool>> visited(n, vector<bool>(MAX_UNIT, false));
  37.         unordered_map<int, int> stoneMap;
  38.         for(int i = 1; i <= n; ++i) {
  39.             stoneMap[stones[i - 1]] = i;
  40.         }
  41.         dp[0][0] = true;
  42.         return canCross(0, 0, stones, stoneMap, visited, dp);
  43.     }
  44. };
Advertisement
Add Comment
Please, Sign In to add comment