
 算法思想: 每次迭代更新可行至的最大范围r(r必保证>=原位置),至到迭代结束,若r>=length of array则说明可以跳跃至此
#include <iostream>  
#include <vector>  
#include <string>  
#include <sstream>
  
using namespace std;
bool canJump(vector<int>& nums) {
    if(nums.size()==1) return true;
    int r=0,max1=0;
    for(int i=0;i<=r;i++){
        if(r>=nums.size()-1) return true;
        r=max(r,i+nums[i]);
    }
    return false;
}
int main() {  
    int n;  
    string s ;  getline(cin,s);
    stringstream ss(s);
    int a ;vector<int> num;
    while(ss >> a) num.push_back(a); n=num.size(); 
	 if(canJump(num) == true ) cout<<"true"<<endl;
    else cout << "false"<<endl;
    
    // dp[i]表示在位置i后,经过下一跳所达位置后,能到达的最大距离 
   
    
    
    return 0;  
}
 
变体题:
 



















