class Solution {
public:
bool canCross(vector<int>& stones) {
int n = stones.size();
unordered_map<int, int> mapp;
vector<unordered_set<int>> dp(n);
for (int i = 0; i < n; i++){
mapp[stones[i]] = i;
}
dp[0].insert(1);
for (int i = 0; i < n; i++){
for (auto it : dp[i]){
int d = it + stones[i];
if (mapp.find(d) != mapp.end()){
for (int j = 1; it + j > 0 && j >= -1; j--){
dp[mapp[d]].insert(it + j);
}
}
}
}
return dp[n-1].size();
}
};