考虑从最后的队形开始依次还原最初的队形。

对于当前的队形,要么选最左边的,要么选最右边的。 如果选了左边的,那么下次选择的一定是大于它的。右边的同理。

所以定义dp[mark][l][r]为区间[l,r]的选择状态为mark的方法数。

然后记忆化搜索一下就可以了。

# include <cstdio>
# include <cstring>
# include <cstdlib>
# include <iostream>
# include <vector>
# include <queue>
# include <stack>
# include <map>
# include <set>
# include <cmath>
# include <algorithm>
using namespace std;
# define lowbit(x) ((x)&(-x))
# define pi 3.1415926535
# define eps 1e-
# define MOD
# define INF
# define mem(a,b) memset(a,b,sizeof(a))
# define FOR(i,a,n) for(int i=a; i<=n; ++i)
# define FO(i,a,n) for(int i=a; i<n; ++i)
# define bug puts("H");
# define lch p<<,l,mid
# define rch p<<|,mid+,r
# define mp make_pair
# define pb push_back
typedef pair<int,int> PII;
typedef vector<int> VI;
# pragma comment(linker, "/STACK:1024000000,1024000000")
typedef long long LL;
int Scan() {
int res=, flag=;
char ch;
if((ch=getchar())=='-') flag=;
else if(ch>=''&&ch<='') res=ch-'';
while((ch=getchar())>=''&&ch<='') res=res*+(ch-'');
return flag?-res:res;
}
void Out(int a) {
if(a<) {putchar('-'); a=-a;}
if(a>=) Out(a/);
putchar(a%+'');
}
const int N=;
//Code begin... int dp[][N][N], a[N]; int dfs(int mark, int l, int r){
if (~dp[mark][l][r]) return dp[mark][l][r];
if (l==r) return dp[mark][l][r]=;
int res=;
if (mark) {
if (a[l]<a[r]) res+=dfs(,l,r-);
if (r-!=l&&a[r-]<a[r]) res+=dfs(,l,r-);
}
else {
if (a[r]>a[l]) res+=dfs(,l+,r);
if (l+!=r&&a[l+]>a[l]) res+=dfs(,l+,r);
}
return dp[mark][l][r]=res%MOD;
}
int main ()
{
mem(dp,-);
int n;
scanf("%d",&n);
FOR(i,,n) scanf("%d",a+i);
printf("%d\n",(dfs(,,n)+dfs(,,n))%MOD);
return ;
}

最新文章

  1. 分享:写了一个 java 调用 C语言 开发的动态库的范例
  2. MangoDB的C#Driver驱动简单例子
  3. php基础篇-二维数组排序 array_multisort
  4. JS的三种弹框
  5. [开发笔记]-使用jquery获取url及url参数的方法
  6. JS之事件(一)
  7. 动态获取爱奇艺上传视频mp4格式url地址
  8. POJ 2762 Going from u to v or from v to u?(强联通 + TopSort)
  9. PC-常见问题-清除浮动
  10. 【js数据结构】栈解决括号不匹配问题
  11. STM32高级定时器TIM1产生两路互补的PWM波(带死区)
  12. 【Spark篇】--Spark中的宽窄依赖和Stage的划分
  13. c# 三种传参方式 in,out,ref
  14. Flutter之MaterialApp使用详解
  15. GitHub18
  16. hdu 4707 仓鼠 记录深度 (BFS)
  17. &lt;--------------------------构造方法------------------------------&gt;
  18. jquery ajax error函数和及其参数详细说明(转载)
  19. J2EEweb开发中的缓存问题的研究
  20. Android Studio SVN使用

热门文章

  1. browser-cookies 一个管理cookies的插件,好用
  2. 【BZOJ4818】序列计数(动态规划,生成函数)
  3. 北京Uber优步司机奖励政策(12月29日)
  4. Linker加载so失败问题分析
  5. 「日常训练」Paths and Trees(Codeforces Round 301 Div.2 E)
  6. TPO-13 C1 Understand the assignment in psychology course
  7. Java初始化方法:类、容器
  8. 【sessionInfo】使用说明
  9. 牛客网暑期ACM多校训练营(第五场):F - take
  10. CSP201612-1:中间数