#include <iostream>
using namespace std;
int a[1001],dp[3][1001][1001];
bool yz[3][1001][1001];
int dot(int k, int i, int j)
{
if (yz[k][i][j]) return dp[k][i][j];
if (i==j) {dp[1][i][j]=1,dp[2][i][j]=0; yz[1][i][j]=1,yz[2][i][j]=1; return 1;}
int ans=0;
if (k==1)
{
if (a[i]<a[i+1]) ans+=dot(1,i+1,j)%19650827;
if (a[i]<a[j]) ans+=dot(2,i+1,j)%19650827;
dp[1][i][j]=ans;
yz[1][i][j]=1;
}
if (k==2)
{
if (a[j]>a[i]) ans +=dot(1,i,j-1)%19650827;
if (a[j]>a[j-1]) ans+=dot(2,i,j-1)%19650827;
dp[2][i][j]=ans;
yz[2][i][j]=1;
}
return ans;
}
int main()
{
int n,ans=0;
cin>>n;
for (int i=1;i<=n;i++)
{
cin>>a[i];
}
ans=dot(1,1,n)+dot(2,1,n);
cout <<ans%19650827;
}
大神们帮忙看看记忆递归怎么把空间yz给优化掉,有些dp[][][]就是0