class Solution {
public:
bool canJump(vector<int>& nums) {
if (nums.empty()) return false;
bool* dp = new bool[nums.size()];
dp[nums.size() - 1] = true;
for (int i = nums.size() - 2; i >= 0; --i) {
dp[i] = false;
for (int j = nums[i]; j > 0; --j) {
if (j>=nums.size()-i-1 || dp[i + j]) {
dp[i] = true;
break;
}
}
}
return dp[0];
}
};