【题解】洛谷P3205【HNOI2010】合唱队
洛谷 P3205:https://www.luogu.org/problemnew/show/P3205
复习区间DPing
思路
把理想队列拆分成
- 第一个和后面几个 划分成求后面几个的理想队列
- 最后一个和前面几个 划分成求前面几个的理想队列
样例:1701 1702 1703 1704
- 把1701拿出来 求1702 1703 1704的理想队列
- 把1704拿出来 求1701 1702 1703的理想队列
因此需要两个数组来划分阶段
f[i][j]为可以排成理想队列中[i,j]区间 且以最后一个排进去是第i人的初始队列种数。
g[i][j]为可以排成理想队列中[i,j]区间 且以最后一个排进去是第j人的初始队列种数。
就可以得出数组f的两种情况:
前一个排进去的人是i+1 当前人插到最左边
if(q[i]<q[i+1])
f[i][j]=(f[i][j]+f[i+1][j])%MOD;
前一个排进去的人是j 当前人插到最左边
if(q[i]<q[j])
f[i][j]=(f[i][j]+g[i+1][j])%MOD;
同理可得数组g的两种情况:
前一个排进去的人是i 当前人插到最右边
if(q[i]<q[j])
g[i][j]=(g[i][j]+f[i][j-1])%MOD;
前一个排进去的人是j-1 当前人插到最右边
if(q[j-1]<q[j])
g[i][j]=(g[i][j]+g[i][j-1])%MOD;
答案存在f[1][n]+g[1][n]中
代码
#include<iostream>
#include<cstdio>
using namespace std;
#define maxn 1010
#define MOD 19650827
int n;
int q[maxn];
int f[maxn][maxn],g[maxn][maxn];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
cin>>q[i];
for(int i=;i<=n;i++)
f[i][i]=;//初始化本身为一种
for(int i=n-;i>=;i--)
for(int j=i+;j<=n;j++)
{
if(q[i]<q[i+])//i+1是从队首取的所以+f[i+1][j]
f[i][j]=(f[i][j]+f[i+][j])%MOD;
if(q[i]<q[j])//j是从队尾取的所以+g[i+1][j]
f[i][j]=(f[i][j]+g[i+][j])%MOD;
if(q[i]<q[j])//i是从队首取的所以+f[i][j-1]
g[i][j]=(g[i][j]+f[i][j-])%MOD;
if(q[j-]<q[j])//j-1是从队尾取的所以+g[i][j-1]
g[i][j]=(g[i][j]+g[i][j-])%MOD;
}
printf("%d",(f[][n]+g[][n])%MOD);
}
【题解】洛谷P3205【HNOI2010】合唱队的更多相关文章
- 洛谷 P3205 [HNOI2010]合唱队 解题报告
P3205 [HNOI2010]合唱队 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为 ...
- 洛谷——P3205 [HNOI2010]合唱队
P3205 [HNOI2010]合唱队 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为 ...
- 洛谷 P3205 [HNOI2010]合唱队
题目链接 题解 区间dp \(f[i][j]\)表示i~j区间最后一次插入的是\(a[i]\) \(g[i][j]\)表示i~j区间最后一次插入的是\(a[j]\) 然后就是普通区间dp转移 Code ...
- [洛谷P3205] HNOI2010 合唱队
问题描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为Hi米(1000<=Hi<= ...
- 洛谷 P3205 [HNOI2010]合唱队(区间dp)
传送门 解题思路 观察队形的组成方式可以得出,最后一名加入区间i...j的人要么是在i位置上,要么是在j位置上,所以我们可以用dp[i][j][0]表示区间i...j最后一个加入的人站在i位置上的方案 ...
- 洛谷P3205 [HNOI2011]合唱队 DP
原题链接点这里 今天在课上听到了这个题,听完后觉得对于一道\(DP\)题目来说,好的状态定义就意味着一切啊! 来看题: 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需 ...
- 「区间DP」「洛谷P3205」「 [HNOI2010]」合唱队
洛谷P3205 [HNOI2010]合唱队 题目: 题目描述 为了在即将到来的晚会上有更好的演出效果,作为 A 合唱队负责人的小 A 需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共 n 个 ...
- Bzoj2002/洛谷P3203 [HNOI2010]弹飞绵羊(分块)
题面 Bzoj 洛谷 题解 大力分块,分块大小\(\sqrt n\),对于每一个元素记一下跳多少次能跳到下一个块,以及跳到下一个块的哪个位置,修改的时候时候只需要更新元素所在的那一块即可,然后询问也是 ...
- 题解 洛谷P5018【对称二叉树】(noip2018T4)
\(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...
随机推荐
- Rabbitmq~对Vhost的配置
rabbitmq里有一些概念我们要清楚,如vhost,channel,exchange,queue等,而前段时间在部署rabbitmq环境时启用了虚拟主机vhost,感觉他主要是起到了消息隔离的作用, ...
- 解决 command not found: express
需要先执行 sudo npm install -g express-generator 再安装 sudo npm install -g express 建立项目骨架 express -e xxx
- git读书笔记以及使用技巧
[添加文件] git add 把文件修改添加到暂存区 git commit -m '' 把暂存区的所有内容提交到当前分支 [查看历史] git log 查看提交历史 git log -- ...
- [Matlab] Galois Field arrays
Operations supported for Galois Field arrays: + - - Addition and subtraction of Galois arrays. * / \ ...
- main方法击破
什么是main方法? 是类中的一段代码,可以让程序独立运行. public class HelloWord{ public static void main(String[] args) { for ...
- 在asp.net中如何使用Session
2.那么在asp.net中到底该怎么使用Session呢? Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换 ...
- 创建 XMLHttpRequest 对象时IE的兼容问题解决办法
为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象.如果支持,则创建 XMLHttpRequest 对象.如果不支持,则创建 ActiveXO ...
- 01_JMS概述
[以前的通信技术的局限性] 在大规模和复杂的分布式系统中,传统的RMI.DCOM等中间件通信技术逐渐有了局限性,如下: 1.同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果才能继续执行. ...
- 跨平台移动开发_PhoneGap 再次点击返回键切换到桌面效果
PhoneGap 再次点击返回键切换到桌面效果 相关代码 <!DOCTYPE html> <html> <head> <title> PhoneGap ...
- WebService小例子———
WebService学习(刚开始) ———————————————————————————————————————————————————————————————————— WebService:跨平 ...