最终为什么输出dfs(1,n,0,1),而不是dfs(1,n,0,1)+dfs(1,n,0x3f3f3f3f,0)呢?
可以从左边开始取,也可以从右边开始取啊。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n;
int h[1005];
int f[1005][1005][2];
const int mod=19650827;
int dfs(int l,int r,int val,int left)
{
if(f[l][r][left]!=-1)
return f[l][r][left];
if(l==r)
{
if(left)
{
if(h[l]>val)
return (f[l][r][left]=1);
}
else
{
if(h[l]<val)
return (f[l][r][left]=1);
}
return (f[l][r][left]=0);
}
int ans=0;
if(left)
{
if(h[l]>val)
{
ans+=dfs(l+1,r,h[l],1);
}
if(h[r]>val)
{
ans+=dfs(l,r-1,h[r],0);
}
}
if(!left)
{
if(h[l]<val)
{
ans+=dfs(l+1,r,h[l],1);
}
if(h[r]<val)
{
ans+=dfs(l,r-1,h[r],0);
}
}
ans=ans%mod;
f[l][r][left]=ans;
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
memset(f,-1,sizeof(f));
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>h[i];
}
cout<<dfs(1,n,0,1);
return 0;
}