- 题解
数列
- 2023-3-18 16:08:38 @
//#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 条评论
目前还没有评论...