P3205 [HNOI2010]合唱队

题目描述

为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形。假定合唱队一共N个人,第i个人的身高为Hi米(1000<=Hi<=2000),并已知任何两个人的身高都不同。假定最终排出的队形是A 个人站成一排,为了简化问题,小A想出了如下排队的方式:他让所有的人先按任意顺序站成一个初始队形,然后从左到右按以下原则依次将每个人插入最终棑排出的队形中:

-第一个人直接插入空的当前队形中。

-对从第二个人开始的每个人,如果他比前面那个人高(H较大),那么将他插入当前队形的最右边。如果他比前面那个人矮(H较小),那么将他插入当前队形的最左边。

当N个人全部插入当前队形后便获得最终排出的队形。

例如,有6个人站成一个初始队形,身高依次为1850、1900、1700、1650、1800和1750,

那么小A会按以下步骤获得最终排出的队形:

1850

1850 , 1900 因为 1900 > 1850

1700, 1850, 1900 因为 1700 < 1900

1650 . 1700, 1850, 1900 因为 1650 < 1700

1650 , 1700, 1850, 1900, 1800 因为 1800 > 1650

1750, 1650, 1700,1850, 1900, 1800 因为 1750 < 1800

因此,最终排出的队形是 1750,1650,1700,1850, 1900,1800

小A心中有一个理想队形,他想知道多少种初始队形可以获得理想的队形

注意要mod19650827

说明

30%的数据:n<=100

100%的数据:n<=1000


思路:区间DP统计方案,只会从小一个的规模转移,因此是\(O(n^2)\)的,手玩以后发现我们需要知道上一次到底是加的哪边,所以加上一维确定。注意不要mod成了19260817

方程:

\(dp[i][j][k]\)表示区间\([i,j]\)在左or右的方案数

转移看代码吧


Code:

#include <cstdio>
const int N=1010;
const int mod=19650827;
int dp[N][N][2];
int n,num[N];
void init()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",num+i);
dp[i][i][0]=1;
}
}
void work()
{
for(int i=n-1;i;i--)
for(int j=i+1;j<=n;j++)
{
if(num[i]<num[i+1])
dp[i][j][0]=(dp[i][j][0]+dp[i+1][j][0])%mod;
if(num[i]<num[j])
dp[i][j][0]=(dp[i][j][0]+dp[i+1][j][1])%mod;
if(num[j]>num[j-1])
dp[i][j][1]=(dp[i][j][1]+dp[i][j-1][1])%mod;
if(num[j]>num[i])
dp[i][j][1]=(dp[i][j][1]+dp[i][j-1][0])%mod;
}
printf("%d\n",(dp[1][n][0]+dp[1][n][1])%mod);
}
int main()
{
init();
work();
return 0;
}

2018.7.6

洛谷 P3205 [HNOI2010]合唱队 解题报告的更多相关文章

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

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

  2. [洛谷P3205] HNOI2010 合唱队

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

  3. 洛谷 P3205 [HNOI2010]合唱队(区间dp)

    传送门 解题思路 观察队形的组成方式可以得出,最后一名加入区间i...j的人要么是在i位置上,要么是在j位置上,所以我们可以用dp[i][j][0]表示区间i...j最后一个加入的人站在i位置上的方案 ...

  4. 洛谷 P3205 [HNOI2010]合唱队

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

  5. 洛谷 P1783 海滩防御 解题报告

    P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...

  6. 洛谷 P4597 序列sequence 解题报告

    P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...

  7. 洛谷1087 FBI树 解题报告

    洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...

  8. 洛谷P3205 [HNOI2011]合唱队 DP

    原题链接点这里 今天在课上听到了这个题,听完后觉得对于一道\(DP\)题目来说,好的状态定义就意味着一切啊! 来看题: 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需 ...

  9. 洛谷 P3349 [ZJOI2016]小星星 解题报告

    P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...

随机推荐

  1. 前端常见算法面试题之 - 从尾到头打印链表[JavaScript解法]

    题目描述 输入一个链表的头结点,从尾到头反过来打印出每个结点的值 实现思路 前端工程师看到这个题目,直接想到的就是,写个while循环来遍历链表,在循环中把节点的值存储在数组中,最后在把数组倒序后,遍 ...

  2. gitlab+jenkins持续集成(二)

    1.jenkins服务器上的配置 -bin.tar.gz -C /opt/ yum install -y git /conf/settings.xml #只需更改maven的地址 <?xml v ...

  3. Netty源码分析第6章(解码器)---->第3节: 行解码器

    Netty源码分析第六章: 解码器 第三节: 行解码器 这一小节了解下行解码器LineBasedFrameDecoder, 行解码器的功能是一个字节流, 以\r\n或者直接以\n结尾进行解码, 也就是 ...

  4. 学习笔记 | Set

    目录 Set Set 前言 不会数据结构选手 当几乎没写过什么数据结构的菜鸡遇上了毒瘤的splay和treap 时间正一点一点地被续走TAT 听说set有时候可以替代treap和splay 那么菜鸡L ...

  5. Tomcat java zabbix 监控

    排除汤姆猫错误的步骤 ps-ef | grep java或jps –lvm 查看java pid进程 netstat –lntup | grep java 查看java 端口有没有启动 查看 tomc ...

  6. bootstrap table的展开行问题

    照着网上与api里说的添加detailView属性设置为true,detailFormatter属性为展开后的内容,但是设置之后发现,在表格每一行最前面是多出一列正常该显示"+"的 ...

  7. TeamWork#3,Week5,Scrum Meeting 11.6, 11.7, 11.11, 11.12

    11.6:到目前为止基本已完成相关知识的学习,各方面工作都开始进行,一开始进行比较慢. 11.7:项目遇到困难,需要补充相关知识,进度慢了下来. 11.11:各方面工作进展比较顺利,没有什么大问题. ...

  8. 将eclipse上的web项目部署到Tomcat服务器上经验总结

    1.  将Tomcat插件添加到eclipse上 Window --> Preferences --> Server --> Runtime Environment --> A ...

  9. do...while和while...do的两种场景比较

    场景:脚本每5分钟执行一次,从数据库中每次查询1000数据进行处理,直到处理结束.两种用while和do...while两种方式实现的伪代码如下: 1. while...do $count = mys ...

  10. ListView高效分页

    使用控件自带的分页功能时,会先将所查询的数据全部加载出来,若数据量较大,则造成浏览器端等待时间过长. 然而在庞大的数据量,用户所需要的不过是那么几条,甚至只要其中的一条数据,所以,为了减少开销,每次只 ...