dp两遍
f[i][j]
数组分段f[i][j]
E. Block Sequence
#include<iostream>
#include<cstring>
using namespace std;
const int N=200010;
int f[N];int a[N];
int n;
int main(){
int T;
cin>>T;
while(T--){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
memset(f,0x3f,sizeof(f));
f[0]=0;
for(int i=1;i<=n+1;i++){
f[i]=min(f[i-1]+1,f[i]);
if(i+a[i]+1<=n+1)
f[i+a[i]+1]=min(f[i+a[i]+1],f[i]);
//[i+1,i+a[i]+1]
}
cout<<f[n+1]-1<<endl;
}
}
C1. Magnitude (Easy Version)
最小和最大两个