class Solution {
public:
    int N;
    int d[10001]={0,};
    void go(vector<int>& nums, int now)
    {
        if(now>=N)
            return ;
        if(d[now] != -1)    return ;
        d[now] = 1;

        for(int i=nums[now];i>=0;i--){
            if(now+i>=N)
                i=N-now;
            if(d[now+i] == -1){
                go(nums,now+i);
            }
            else
                break;
        }
    }
    bool canJump(vector<int>& nums) {
        memset(d,-1,sizeof(d));
        N = nums.size();
        go(nums,0);
        return d[nums.size()-1] > 0 ? 1 : 0;

    }
};


엉망인 소스