//#pragma GCC optimize(1,2,3,"Ofast","inline")
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
#define int long long
#define fre freopen("sequence.in","r",stdin),freopen("sequence.out","w",stdout)
#define fcl fclose(stdin),fclose(stdout)
inline int max(int x,int y) {
	return x<y?y:x;
}
inline int read() {
	register int x=0,m=1;
	register char ch=getchar();
	while(!isdigit(ch)) {
		if(ch=='-') m=-1;
		ch=getchar();
	}
	while(isdigit(ch)) {
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	}
	return x*m;
}
inline void write(int x) {
	if(x<0) putchar('-'),write(-x);
	else {
		if(x>=10) write(x/10);
		putchar(x%10+'0');
	}
}
#define read(n) n=read()
const int N=1e3+5;
int n,a[N],f[N][N],res;
signed main() {
	fre;
	read(n);
	for(register int i=1;i<=n;++i)
		read(a[i]);
	for(register int i=1;i<=n;++i) {
		f[i][0]=f[i-1][0];
		if(a[i]==i)
			++f[i][0];
	}
	for(register int i=1;i<=n;++i)
		for(register int j=0;j<=i;++j)
			if(a[i]==i-j)
				f[i][j]=max(f[i-1][j]+1,f[i-1][j-1]);
			else
				f[i][j]=max(f[i-1][j],f[i-1][j-1]);
	for(register int i=1;i<=n;++i)
		res=max(res,f[n][i]);
	write(res);
	fcl;
	return 0;
}

0 条评论

目前还没有评论...