解题思路

设置两个二维数组 $f$ 和 $g$,含义如下。

$f[l][r]$ 表示在期望得到的队形中 $l\rightarrow r$ 这段区间初始队形排列的方案数,并且最后一个加入进去的是第 $l$ 个人。

$g[l][r]$ 表示在期望得到的队形中 $l\rightarrow r$ 这段区间初始队形排列的方案数,并且最后一个加入进去的是第 $r$ 个人。

那么可以看出来 $g[l][r]$ 可以从 $g[l][r-1]$ 跟新出来,$f[l][r]$ 可以从 $f[l+1][r]$ 跟新出来。

大致可以分为下面四种情况:

  • 现在决策的这个人插到队伍的最左边,即当前这个人比前一个加入队列的要矮,针对 $f[l][r]$

    • 前一个排进去的人是在第 $l+1$ 的位置上,$f[l+1][r]\rightarrow a[l]<a[l+1]$
    • 前一个排进去的人是在第 $r$ 的位置上,$g[l+1][r]\rightarrow a[l]<a[r]$
  • 现在决策的这个人插到队伍的最右边,即当前这个人比前一个加入队列的要高,针对 $g[l][r]$
    • 前一个排进去的人是在第 $l$ 的位置上,$f[l][r-1]\rightarrow a[r]>a[l]$
    • 前一个排进去的人是在第 $r-1$ 的位置上,$g[l][r-1]\rightarrow a[r]>a[r-1]$

根据上面的关系就可以写出状态转移方程

记得要初始化 $l=r$ 的数组,还有就是枚举区间长度的时候从 $2$ 开始枚举,否则会改变 之前初始化的数组造成答案出错

附上代码

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn = , HA = ;
int n, f[maxn][maxn], g[maxn][maxn], a[maxn];
int main() {
scanf("%d", &n);
for(int i=; i<=n; i++)
scanf("%d", &a[i]);
for(int i=; i<=n; i++) f[i][i] = ;
static int r;
for(int i=; i<=n; i++) {
for(int l=; l+i-<=n; l++) {
r = l+i-;
f[l][r] = f[l+][r] * (a[l]<a[l+]) % HA + g[l+][r] * (a[l]<a[r]) % HA;
f[l][r] = f[l][r] % HA;
g[l][r] = f[l][r-] * (a[r]>a[l]) % HA + g[l][r-] * (a[r]>a[r-]) % HA;
g[l][r] = g[l][r] % HA;
}
}
printf("%d", (g[][n]+f[][n]) % HA);
}

『 Luogu P3205 』 HNOI2010 合唱队的更多相关文章

  1. 题解 P3205 【[HNOI2010]合唱队】

    讲讲我的做法 看了题目发现要用区间\(dp\),为什么? 我们发现区间\(dp\)有一个性质--大区间包涵小区间,这道题就符合这样的一个性质 所以我们要用区间\(dp\)来解决这道题. 如何设计状态 ...

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

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

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

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

  4. 似魔鬼的 『 document.write 』

    在平时的工作中,楼主很少用 document.write 方法,一直觉得 document.write 是个危险的方法.楼主不用,并不代表别人不用,最近给维护的项目添了一点代码,更加深了我对 &quo ...

  5. 拾遗:『Linux Capability』

    『Linux Capability』 For the purpose of performing permission checks, traditional UNIX implementations ...

  6. 『创意欣赏』20款精致的 iOS7 APP 图标设计

    这篇文章给大家分享20款精致的 iOS7 移动应用程序图标,遵循图形设计的现代潮流,所有图标都非常了不起,给人惊喜.通过学习这些移动应用程序图标,设计人员可以提高他们的创作,使移动用户界面看起来更有趣 ...

  7. 『设计前沿』14款精致的国外 iOS7 图标设计示例

    每天都有大量的应用程序发布到 iOS App Store 上,在数量巨大的应用中想要引起用户的主要,首要的就是独特的图标设计.这篇文章收集了14款精致的国外 iOS7 图标设计示例,希望能带给你设计灵 ...

  8. Github 恶搞教程(一起『玩坏』自己的 Github 吧)

    最近在伯乐在线读到一篇趣文,<如何在 Github『正确』做贡献>,里面各种能人恶搞 Github 的『Public contributions』,下面截取几个小伙伴的战绩: 顺藤摸瓜,发 ...

  9. 『创意欣赏』30幅逼真的 3D 虚拟现实环境呈现

    又到周末了,给大家分享30幅漂亮的 3D 虚拟现实环境呈现,放松一下.这些创造性的场景都是通过 3D 图形设计软件,结合三维现实环境渲染制作出来的.一起欣赏:) 您可能感兴趣的相关文章 20幅温馨浪漫 ...

随机推荐

  1. css3 3d特效汇总

    本篇全是实战,没有基础,如果不明白3d特效的原理,可能会看不懂,不过没关系,给你推荐一下 张鑫旭css3 3d转换,或者看我的另一篇博客  css3 2d转换3d转换以及动画的知识点汇总,看完这些3d ...

  2. H264 介绍[1]

    频编解码技术有两套标准,国际电联(ITU-T)的标准H.261.H.263.H.263+等:还有ISO 的MPEG标准Mpeg1.Mpeg2.Mpeg4等等.H.264/AVC是两大组织集合H.263 ...

  3. UVA - 12345 带修改的莫队

    题意显然:给出初始序列,单点修改,区间查询元素的种类. 由于时限过宽,暴力可过. 比较优秀的解法应该是莫队. 带修改的莫队题解可以看https://www.luogu.org/blog/user126 ...

  4. bzoj4825

    LCT 昨天调试一天没出来,今天推倒重写还是gg了,内心崩溃照着源代码抄,结果发现自己把原树fa和splay的fa一起维护,各种re... 其实我们手玩一下,发现其实树的形态变化很小,那么就可以用lc ...

  5. Java方式 MySQL数据库连接

    JDBC-ODBC : 桥连就是将对JDBC API的调用转换为对另一组数据库连接(即 ODBC) API 的调用 JDBC-ODBC桥连方式驱动类是: sun.jdbc.odbc.JdbcOdbcD ...

  6. mycat查表报错Invalid DataSource:0解决方法

    报错时机 登录没问题 use库没问题 select任意一张表均报错 报错信息 mysql> select * from mydb.tb_user; ERROR 3009 (HY000): jav ...

  7. jquery实现文字自动向上滚动,鼠标放上去停止,移开继续滚动代码...

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. lua调用java java调用lua[转载]

    转载:http://dualface.github.io/blog/2013/01/01/call-java-from-lua/LuaJavaBridge - Lua 与 Java 互操作的简单解决方 ...

  9. RabbitMQ指南之四:路由(Routing)和直连交换机(Direct Exchange)

    在上一章中,我们构建了一个简单的日志系统,我们可以把消息广播给很多的消费者.在本章中我们将增加一个特性:我们可以订阅这些信息中的一些信息.例如,我们希望只将error级别的错误存储到硬盘中,同时可以将 ...

  10. log4j2异步日志解读(一)AsyncAppender

    log4j.logback.log4j2 历史和关系,我们就在这里不展开讲了.直接上干货,log4j2突出于其他日志的优势,异步日志实现. 看一个东西,首先看官网文档 ,因为前面文章已经讲解了disr ...