// 掉转思维,从后往前走, (上一个,当前一个,下一个)
// 从后往前遍历,若下一个能够得上当前这个则选取它。
// 因为从前往后走时,如果上一个能够的上下一个,则上一个一定能够得上当前一个,因为是非负整数,选了不会亏
#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;
}

京公网安备 11010502036488号