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$的情况。

代码:

  1. #include <algorithm>
  2. #include <cstdio>
  3. const int N = 1005;
  4. const int mod = 19650827;
  5. int H[N], _f[2][N], _g[2][N];
  6. int main() {
  7. int n;
  8. scanf("%d", &n);
  9. for (int i = 0; i < n; ++i) scanf("%d", &H[i]);
  10. int *f = _f[0], *g = _g[0], *ff = _f[1], *gg = _g[1];
  11. for (int i = 0; i < n; ++i) f[i] = 1;
  12. for (int i = 1; i < n; ++i) {
  13. std::swap(f, ff);
  14. std::swap(g, gg);
  15. for (int j = 0; i + j < n; ++j) {
  16. f[j] = g[j] = 0;
  17. if (H[j] < H[j + 1]) f[j] += ff[j + 1];
  18. if (H[j] < H[j + i]) f[j] += gg[j + 1];
  19. if (H[j + i] > H[j]) g[j] += ff[j];
  20. if (H[j + i] > H[j + i - 1]) g[j] += gg[j];
  21. f[j] %= mod;
  22. g[j] %= mod;
  23. //printf("%d %d ", f[j], g[j]);
  24. }
  25. //printf("\n");
  26. }
  27. printf("%d\n", (f[0] + g[0]) % mod);
  28. return 0;
  29. }

  

BZOJ1996 [Hnoi2010] 合唱队的更多相关文章

  1. BZOJ1996 HNOI2010合唱队(区间dp)

    设f[i][j][0/1]表示i~j这段区间上一次选择的是最左/最右人的方案数.转移显然. #include<iostream> #include<cstdio> #inclu ...

  2. 【BZOJ1996】合唱队(动态规划)

    [BZOJ1996]合唱队(动态规划) 题面 BZOJ 题解 很容易的一道题 因为每个人不是放在了左边就是放在了右边 所以每次放好的人必定是原序列的一个子串 所以,很容易想到区间\(dp\) 设\(f ...

  3. 洛谷 P3205 [HNOI2010]合唱队 解题报告

    P3205 [HNOI2010]合唱队 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为 ...

  4. 洛谷——P3205 [HNOI2010]合唱队

    P3205 [HNOI2010]合唱队 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为 ...

  5. bzoj千题计划211:bzoj1996: [Hnoi2010]chorus 合唱队

    http://www.lydsy.com/JudgeOnline/problem.php?id=1996 f[i][j][0/1] 表示已经排出队形中的[i,j],最后一个插入的人在[i,j]的i或j ...

  6. BZOJ1996 [Hnoi2010]chorus 合唱队

    很容易想到区间DP 然后发现这个区间只和圆序列的最后一个数有关,而原序列的最后一个数只可能是现在区间的头或者尾 令$f[i][j][0/1]$表示在区间$[i, j]$之间,原序列的最后一个数是当前区 ...

  7. BZOJ1996:[HNOI2010]CHORUS 合唱队(区间DP)

    Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Output 8 HINT Solution 辣鸡guide真难用 ...

  8. BZOJ1996: [Hnoi2010]chorus 合唱队 (DP)

    就是想水一发 #include <stdio.h> #include <algorithm> #include <iostream> using namespace ...

  9. P3205 [HNOI2010]合唱队[区间dp]

    题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为Hi米(1000<=Hi<= ...

随机推荐

  1. python 对mongodb进行压力测试

    最近对mongoDB数据库进行性能分析,需要对数据库进行加压. 加压时,最初采用threading模块写了个多线程程序,测试的效果不理想. 单机读数据库每秒请求数只能达到1000次/s.而开发的jav ...

  2. 获取指定订阅下所有Azure ARM虚拟机配置(CPU核数,内存大小,磁盘信息)的使用情况

    脚本内容: <# .SYNOPSIS This script grab all ARM VM VHD file in the subscription and caculate VHD size ...

  3. spring cloud ribbon源码解析(一)

    我们知道spring cloud中restTemplate可以通过服务名调接口,加入@loadBalanced标签就实现了负载均衡的功能,那么spring cloud内部是如何实现的呢? 通过@loa ...

  4. SVN版本库备份和恢复

    1.版本库备份 1.1.svnadmin dump方式备份 此方法借助的是Subversion官网推荐的svnadmin dump备份方式,它的优点是比较灵活,既可以进行全量备份又可以进行增量备份,并 ...

  5. Python 全栈开发:day3 作业与默写

    # 1.有变量name = "aleX leNb" 完成如下操作:name = 'aleX leNb'# 1)移除 name 变量对应的值两边的空格,并输出处理结果print(na ...

  6. [Alpha]Scrum Meeting#7

    github 本次会议项目由PM召开,时间为4月9日晚上10点30分 时长15分钟 任务表格 人员 昨日工作 下一步工作 木鬼 整理并发布之前因为清明耽误的博客 撰写每日例会报告 SiMrua 添加暂 ...

  7. Exponentiation POJ-1001

    http://poj.org/problem?id=1001 //10000000 100000 #include<iostream> #include<cstring> us ...

  8. [ZJOI2019]Minimax搜索

    先求出根节点的权值\(w\).根据套路,我们对于每个\(k\),计算\(w(s)\leq k\)的方案数,差分得到答案.为了方便,接下来考虑计算概率而不是方案数. 可以发现,对于一个给定的有解的子集, ...

  9. Mac下安装tomcat8(Mac 10.12)

    1.到官网下载tomcat8 http://tomcat.apache.org/download-80.cgi 说明:tomcat最好不要下载最新的,选择一个适中的最好. 2.安装 ▲解压并重命名文件 ...

  10. javascript全局方法与变量

    1.encodeURI(URI) a.作用:是对统一资源标识符(URI)进行编码的方法: b.参数:是一个完整的URI: c.特点:不需要对保留字以及在URI中有特殊意思的字符进行编码. (1).保留 ...