Description

Input

Output

Sample Input

4
1701 1702 1703 1704

Sample Output

8

HINT

Solution

令$f_{i,j}$表示区间$[j,i+j]$在限定最后一个放$i$的情况下的方案数(之所以不是$[j,i]$,是因为那样不好滚动),$g_{i,j}$是限定最后一个放$i+j$的方案数。

转移时考虑上次放的是哪一个就可以了。要特殊处理$i=1$的情况。

代码:

#include <algorithm>
#include <cstdio>
const int N = 1005;
const int mod = 19650827;
int H[N], _f[2][N], _g[2][N];
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; ++i) scanf("%d", &H[i]);
int *f = _f[0], *g = _g[0], *ff = _f[1], *gg = _g[1];
for (int i = 0; i < n; ++i) f[i] = 1;
for (int i = 1; i < n; ++i) {
std::swap(f, ff);
std::swap(g, gg);
for (int j = 0; i + j < n; ++j) {
f[j] = g[j] = 0;
if (H[j] < H[j + 1]) f[j] += ff[j + 1];
if (H[j] < H[j + i]) f[j] += gg[j + 1];
if (H[j + i] > H[j]) g[j] += ff[j];
if (H[j + i] > H[j + i - 1]) g[j] += gg[j];
f[j] %= mod;
g[j] %= mod;
//printf("%d %d ", f[j], g[j]);
}
//printf("\n");
}
printf("%d\n", (f[0] + g[0]) % mod);
return 0;
}

  

最新文章

  1. LinqToDB 源码分析——轻谈Linq查询
  2. Nginx - Windows下作为服务启动
  3. 老生长谈的$.extend()方法
  4. php curl 例子
  5. c++的转换
  6. RFID应用范围
  7. Navicat for mysql 破解
  8. select、poll、poll的比较(转)
  9. PlayFramework 1.2.x 在Controller 中识别JSON提交
  10. HDU 3466
  11. C语言学习--可变数组
  12. java07循环结构
  13. Microsoft OLE DB Provider for SQL Server 错误 &#39;80040e21&#39;
  14. 读取webconfig里面的appSetting和connectionString
  15. javascript集合求交集
  16. Angular TypeScript开发环境集成jQuery扩展插件
  17. [BlueZ] 1、Download install and use the BlueZ and hcitool on PI 3B+
  18. 基于centos6.5安装部署mongdb3.6
  19. PA教材提纲 TAW12-1
  20. Nginx配置跨域支持功能

热门文章

  1. html中object和embed标签的区别
  2. SQL查询表结构的语句
  3. es6学习 1
  4. python全栈开发学习_内容目录及链接
  5. 总纲篇:产品结构设计指导VII(本博客指引章节)
  6. Flask基本知识
  7. TensorFlow架构与设计:概述
  8. 使用Jasperreporter生成入库出库单打印等报表操作
  9. poj 1222EXTENDED LIGHTS OUT
  10. Perl入门