[HNOI2010] 合唱队
题目链接: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] 合唱队的更多相关文章
- 洛谷 P3205 [HNOI2010]合唱队 解题报告
P3205 [HNOI2010]合唱队 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为 ...
- 洛谷——P3205 [HNOI2010]合唱队
P3205 [HNOI2010]合唱队 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为 ...
- P3205 [HNOI2010]合唱队[区间dp]
题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为Hi米(1000<=Hi<= ...
- P3205 [HNOI2010]合唱队
题目点这里 题面: 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为Hi米(1000<=Hi ...
- [洛谷P3205] HNOI2010 合唱队
问题描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为Hi米(1000<=Hi<= ...
- BZOJ1996 [Hnoi2010] 合唱队
Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Output 8 HINT Solution 令$f_{i,j}$ ...
- BZOJ1996 HNOI2010合唱队(区间dp)
设f[i][j][0/1]表示i~j这段区间上一次选择的是最左/最右人的方案数.转移显然. #include<iostream> #include<cstdio> #inclu ...
- [HNOI2010]合唱队 区间DP
---题面--- 题解: 偶然翻到这道题,,,就写了. 观察到一个数被插在哪里只受前一个数的影响,如果明确了前一个数是哪个,那么我们就可以确定大小关系,就可以知道当前这个数插在哪里,而上一个插入的数就 ...
- 洛谷 P3205 [HNOI2010]合唱队
题目链接 题解 区间dp \(f[i][j]\)表示i~j区间最后一次插入的是\(a[i]\) \(g[i][j]\)表示i~j区间最后一次插入的是\(a[j]\) 然后就是普通区间dp转移 Code ...
随机推荐
- $.getJSON() 回调函数没有执行的原因
$.getJSON() 方法使用 AJAX 的 HTTP GET 请求获取 JSON 数据. 语法 $.getJSON(url,data,success(data,status,xhr)) url必填 ...
- 强大的vim配置文件,让编程更随意 (转载)
花了很长时间整理的,感觉用起来很方便,共享一下. 我的vim配置主要有以下优点: 1.按F5可以直接编译并执行C.C++.java代码以及执行shell脚本,按“F8”可进行C.C++代码的调试 2. ...
- html 资源
- Spark scala和java的api使用
1.利用scala语言开发spark的worcount程序(本地运行) package com.zy.spark import org.apache.spark.rdd.RDD import org. ...
- coding创建项目
在本地,使用git 需要创建一个pom.xml文件,就可以导入到工作空间了! 在需要项目工作空间里,依次使用git命令执行 mkdir test //创建文件夹,项目名称cd test //切换 ...
- SpringBoot整合SpringData和Mysql数据库
1.新建maven项目(具体的新建过程就不细说了) 2.添加maven依赖,也就是在pom.xml文件添加项目的依赖jar包: <project xmlns="http://maven ...
- 关于jdk7中 使用Collections的排序方法时报Comparison method violates its general contract!异常
参考: Comparison method violates its general contract Comparison method violates its general contract! ...
- 面向对象JS基础
什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下 ...
- 比较C++、Java、Delphi声明类对象时候的相关语法
同学们在学习的时候经常会遇到一些问题,C++.Java.Delphi他们到底有什么不一样的呢?今天我们来比较C++.Java.Delphi声明类对象时候的相关语法.希望对大家有帮助! C++中创建对象 ...
- [SoapUI] DataSource, DataSourceLoop, DataSink
Script assertion in login: