题目链接:https://www.luogu.org/problemnew/show/P3205

一个区间DP的题目。

设计状态为:\(dp1[i][j]\)表示当前区间为\([i,j]\),而且最后一个放入的在\(i\)位置,\(dp2[i][j]\)表示当前区间为\([i,j]\),而且最后一个放入的在\(j\)位置。

那么状态转移就是:

if(a[i]<a[i+1])
dp1[i][j]+=dp1[i+1][j];
if(a[i]<a[j])
dp1[i][j]+=dp2[i+1][j];
if(a[j]>a[i])
dp2[i][j]+=dp1[i][j-1];
if(a[j]>a[j-1])
dp2[i][j]+=dp2[i][j-1];

注意初始化有两种qwq:\(dp1[i][i]=1\)和\(dp2[i][i]=1\),因为是加法原理累加,所以写一个就可以了。

代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define MAXN 1010
#define mod 19650827
using namespace std;
int n;
int a[MAXN],dp1[MAXN][MAXN],dp2[MAXN][MAXN];
int main()
{ scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) dp1[i][i]=1;
for(int i=n-1;i>=1;i--)
{
for(int j=i+1;j<=n;j++)
{
if(a[i]<a[i+1]) dp1[i][j]+=dp1[i+1][j],dp1[i][j]%=mod;
if(a[i]<a[j]) dp1[i][j]+=dp2[i+1][j],dp1[i][j]%=mod;
if(a[j]>a[i]) dp2[i][j]+=dp1[i][j-1],dp2[i][j]%=mod;
if(a[j]>a[j-1]) dp2[i][j]+=dp2[i][j-1],dp2[i][j]%=mod;
}
}
printf("%d\n",(dp1[1][n]+dp2[1][n])%mod);
return 0;
}

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

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

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

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

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

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

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

  4. P3205 [HNOI2010]合唱队

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

  5. [洛谷P3205] HNOI2010 合唱队

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

  6. BZOJ1996 [Hnoi2010] 合唱队

    Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Output 8 HINT Solution 令$f_{i,j}$ ...

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

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

  8. [HNOI2010]合唱队 区间DP

    ---题面--- 题解: 偶然翻到这道题,,,就写了. 观察到一个数被插在哪里只受前一个数的影响,如果明确了前一个数是哪个,那么我们就可以确定大小关系,就可以知道当前这个数插在哪里,而上一个插入的数就 ...

  9. 洛谷 P3205 [HNOI2010]合唱队

    题目链接 题解 区间dp \(f[i][j]\)表示i~j区间最后一次插入的是\(a[i]\) \(g[i][j]\)表示i~j区间最后一次插入的是\(a[j]\) 然后就是普通区间dp转移 Code ...

随机推荐

  1. Expect 小脚本

    简介: Expect 可以替系统管理员完成与系统的交互式操作 shell > yum -y install expect # 可以通过 yum 安装 shell > which expec ...

  2. Java并发之AQS详解(转)

    一.概述 谈到并发,不得不谈ReentrantLock:而谈到ReentrantLock,不得不谈AbstractQueuedSynchronized(AQS)! 类如其名,抽象的队列式的同步器,AQ ...

  3. 如何建立ElasticSearch里的mappings?

    刚接触elasticsearch,好多东西都不会用,百度了很多,都看不懂,终于摸索出了最简单的通过http建立mappings的方法~ 有人在建立mappings报各种错误,首先,如果你的这个索引中已 ...

  4. chrome浏览器控制台创建js脚本并执行

    Chrome的snippets是小脚本,还可以创作并在Chrome DevTools的来源面板中执行.您可以访问和从任何页面运行它们.当你运行一个片段,它从当前打开的页面的上下文中执行.本文主要讲如何 ...

  5. UsePass & GrabPass

    [UsePass] The UsePass command uses named passes from another shader. [Syntax] UsePass "Shader/N ...

  6. VUE+WebPack游戏设计:'乘法防线'游戏设计

  7. crm第一天

    课程由1-7组成 自己实现的代码: 教程:

  8. SUSE Linux--zypper程序包管理(实战命令总结)

    (1)zypper ar iso:/?iso=/media/SOFTWARE/openSUSE-11.4-DVD-i586.iso DVDISO 新添加本地iso文件为安装源,名称和别名均为DVDIS ...

  9. CentOS7 下 安装 supervisor

    [注] linux环境必须安装 python 1.获取supervisor包:[https://pypi.python.org/pypi/supervisor] # wget https://pypi ...

  10. MongoDBAppender

    分三步: 1. client 2. appender 3. 配置文件 logback-test.xml <configuration> <appender name="MO ...