题目地址
#include<cstdio>
#include<iostream>
using namespace std;
const int MAXN=2e3,INF=2e9,MOD=19650827;
int a[MAXN],f[MAXN][MAXN][2];
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++)
f[i][i][0]=1;
int ans=-INF;
for(int len=2;len<=n;len++){
for(int i=1;i<n;i++){
int j=i+len-1;
if(j>n)continue;
if(a[i]<a[i+1]){//比第一个人矮
f[i][j][0]+=f[i+1][j][0];
f[i][j][0]%=MOD;
}
if(a[i]<a[j]){//比最后一个人矮
f[i][j][0]+=f[i+1][j][1];
f[i][j][0]%=MOD;
}
if(a[j]>a[j-1]){//比最后一个人高
f[i][j][1]+=f[i][j-1][1];
f[i][j][1]%=MOD;
}
if(a[j]>a[i]){//比第一个人高
f[i][j][1]+=f[i][j-1][0];
f[i][j][1]%=MOD;
}
}
}
cout<<(f[1][n][0]+f[1][n][1])%MOD<<endl;
return 0;
}