题解 | #跳跃游戏(二)#
跳跃游戏(二)
https://www.nowcoder.com/practice/58e31b785f4b4ced9695dd4fcd60c1ce
// 掉转思维,从后往前走, (上一个,当前一个,下一个) // 从后往前遍历,若下一个能够得上当前这个则选取它。 // 因为从前往后走时,如果上一个能够的上下一个,则上一个一定能够得上当前一个,因为是非负整数,选了不会亏 #include<iostream> using namespace std; const int N=1e5+6; int arr[N]; int n; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr), cout.tie(nullptr); cin>>n; for(int i=0;i<n;i++){ cin>>arr[i]; } int ind=n-1,ans=arr[n-1]; for(int i=n-2;i>=0;i--){ if(i+arr[i]>=ind){ ind=i; ans+=arr[i]; } } if(ind==0) cout<<ans; else cout<<"-1"; return 0; }