bzoj 1996: [Hnoi2010]chorus 合唱队
Description

Input

Output

Sample Input
1701 1702 1703 1704
Sample Output
HINT
Source
因为只会在区间的两端进行操作,这很容易让我们想到一种区间dp的模型。。。
dp[i][j]表示区间[i,j]已经匹配上了的方案数,因为我们需要知道上一个填的数是什么所以多加一维,
dp[i][j][0]表示最后填的数在区间左边,dp[i][j][1]表示最后填的数在区间右边,
这样我们可以确切的知道上一个填的数。。。。
那么转移就很显然了:
dp[i][j][0]=dp[i+1][j][0]*(h[i]<h[i+1])+dp[i+1][j][1]*(h[i]<h[j]);
dp[i][j][1]=dp[i][j-1][0]*(h[j]>h[i])+dp[i][j-1][1]*(h[j]>h[j-1]);
然而第一个方程i+1==j的时候会加两次,第二个方程j-1==i的时候也会加两次,所以判一下。。。
// MADE BY QT666
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=1050;
const int Mod=19650827;
int dp[N][N][2],h[N],n;
int main(){
freopen("chorus.in","r",stdin);
freopen("chorus.out","w",stdout);
scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&h[i]);
for(int i=1;i<=n;i++) dp[i][i][0]=dp[i][i][1]=1;
for(int i=n;i>=1;i--){
for(int j=i+1;j<=n;j++){
if(h[i]<h[j]) (dp[i][j][0]+=dp[i+1][j][1])%=Mod;
if(h[i]<h[i+1]&&i+1!=j) (dp[i][j][0]+=dp[i+1][j][0])%=Mod;
if(h[j]>h[i]) (dp[i][j][1]+=dp[i][j-1][0])%=Mod;
if(h[j]>h[j-1]&&j-1!=i) (dp[i][j][1]+=dp[i][j-1][1])%=Mod;
}
}
printf("%d\n",(dp[1][n][0]+dp[1][n][1])%Mod);
return 0;
}
bzoj 1996: [Hnoi2010]chorus 合唱队的更多相关文章
- BZOJ 1996: [Hnoi2010]chorus 合唱队(dp)
简单的dp题..不能更水了.. --------------------------------------------------------------- #include<cstdio&g ...
- BZOJ 1996: [Hnoi2010]chorus 合唱队(区间dp)
题目: https://www.lydsy.com/JudgeOnline/problem.php?id=1996 题解: 这题刚拿到手的时候一脸懵逼qwq,经过思考与分析(看题解),发现是一道区间d ...
- 【BZOJ】1996: [Hnoi2010]chorus 合唱队【区间dp】
1996: [Hnoi2010]chorus 合唱队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2088 Solved: 1371[Submit][ ...
- 1996: [Hnoi2010]chorus 合唱队 - BZOJ
Description Input Output Sample Input41701 1702 1703 1704Sample Output8HINT 水题,区间dp,f[l,r,k]表示区间[l,r ...
- 1996: [Hnoi2010]chorus 合唱队
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1996 Description Input Output Sample Input 4 1701 ...
- 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 ...
- bzoj1196:[Hnoi2010]chorus 合唱队
这数据范围明显的区间dp啊...然而据说二维会wa...那就写三维把... #include<cstdio> #include<cstring> #include<cct ...
- 【BZOJ1996】[Hnoi2010]chorus 合唱队 区间DP
[BZOJ1996][Hnoi2010]chorus 合唱队 Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Ou ...
- BZOJ1996 [Hnoi2010]chorus 合唱队
很容易想到区间DP 然后发现这个区间只和圆序列的最后一个数有关,而原序列的最后一个数只可能是现在区间的头或者尾 令$f[i][j][0/1]$表示在区间$[i, j]$之间,原序列的最后一个数是当前区 ...
随机推荐
- java中的static和final关键字
一:static 1)修饰成员变量: static关键字可以修饰成员变量,它所修饰的成员变量不属于对象的数据结构,而是属于类的变量,通常通过类名来引用static成员. 当创建对象后,成员变量是存储在 ...
- day02HTML_CSS
掌握表单标签 <form action="http://www.baidu.com" method="post"> ... </form> ...
- A:分段函数-poj
A:分段函数 总时间限制: 1000ms 内存限制: 65536kB 描述 编写程序,计算下列分段函数y=f(x)的值. y=-x+2.5; 0 <= x < 5 y=2-1.5(x- ...
- Python入门 - 容器类型
python的容器有四种:列表List,元祖Tuple,字典Dictionary和集合Set. 一.列表List a = [1, 2, 3, 'a', 'b', 'c'] b = 1.5 a.appe ...
- viewer.js的简单练习
html <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8& ...
- JavaScript正则表达式(Regular Expression):RegExp对象
第一部分:新建正则表达式 JavaScript中正则表达式是参照Perl 5(一门历史很悠久的语言,现在tiobe编程语言排行依然在10名左右)建立的. 新建正则表达式的方法有两种: 1.使用字面量( ...
- Android OpenGL ES 开发(二): OpenGL ES 环境搭建
零:环境搭建目的 为了在Android应用程序中使用OpenGL ES绘制图形,必须要为他们创建一个视图容器.其中最直接或者最常用的方式就是实现一个GLSurfaceView和一个GLSurfaceV ...
- 基于maven的ssm框架整合
基于maven的ssm框架整合 第一步:通过maven建立一个web项目. 第二步:pom文件导入jar包 (1 ...
- MyEclipse 使用图文详解
引言 某天在群里看到有小伙伴问MyEclipse/Eclipse的一些使用问题,虽然在我看来,问的问题很简单,但是如果对于刚刚学习的人来说,可能使用就不那么友好了.毕竟我在开始使用MyEclipse/ ...
- Web前端学习——JavaScript
一.JavaScript介绍JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚 ...