【BZOJ1996】合唱队(动态规划)
【BZOJ1996】合唱队(动态规划)
题面
题解
很容易的一道题
因为每个人不是放在了左边就是放在了右边
所以每次放好的人必定是原序列的一个子串
所以,很容易想到区间\(dp\)
设\(f[i][j]\)表示已经放好了第\(i\)个人到第\(j\)个人的方案数
因为不知道这个人的前面是当前序列的左端还是右端
所以再加一维\([0/1]\)表示上一个放的人在左边还是右边
然后分类讨论一下大力转移即可
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define RG register
#define MAX 1200
#define MOD 19650827
inline int read()
{
RG int x=0,t=1;RG char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
int f[MAX][MAX][2];
int n,a[MAX];
int main()
{
n=read();
for(int i=1;i<=n;++i)a[i]=read(),f[i][i][0]=1;
for(int len=2;len<=n;++len)
{
for(int i=1;i+len-1<=n;++i)
{
int j=i+len-1;
if(a[i]<a[i+1])f[i][j][0]=(f[i][j][0]+f[i+1][j][0])%MOD;
if(a[i]<a[j])f[i][j][0]=(f[i][j][0]+f[i+1][j][1])%MOD;
if(a[j]>a[i])f[i][j][1]=(f[i][j][1]+f[i][j-1][0])%MOD;
if(a[j]>a[j-1])f[i][j][1]=(f[i][j][1]+f[i][j-1][1])%MOD;
}
}
printf("%d\n",(f[1][n][0]+f[1][n][1])%MOD);
return 0;
}
【BZOJ1996】合唱队(动态规划)的更多相关文章
- BZOJ1996 合唱队 区间DP
OJ地址:http://www.lydsy.com/JudgeOnline/problem.php?id=1996 设dp(i,j,k)代表在理想结果中[i,j]段最后添加的是i或j(k=0or1) ...
- 【BZOJ1996】[Hnoi2010]chorus 合唱队 区间DP
[BZOJ1996][Hnoi2010]chorus 合唱队 Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Ou ...
- 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 ...
- BZOJ1996 HNOI2010合唱队(区间dp)
设f[i][j][0/1]表示i~j这段区间上一次选择的是最左/最右人的方案数.转移显然. #include<iostream> #include<cstdio> #inclu ...
- 【BZOJ1996】【HNOI2010】合唱队 [区间DP]
合唱队 Time Limit: 4 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description Input Output Sample ...
- BZOJ1996 [Hnoi2010]chorus 合唱队
很容易想到区间DP 然后发现这个区间只和圆序列的最后一个数有关,而原序列的最后一个数只可能是现在区间的头或者尾 令$f[i][j][0/1]$表示在区间$[i, j]$之间,原序列的最后一个数是当前区 ...
- BZOJ1996 [Hnoi2010] 合唱队
Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Output 8 HINT Solution 令$f_{i,j}$ ...
- [BZOJ1996] chorus合唱队
Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Output 8 HINT 区间$dp$,首先每个点被放入队伍时队 ...
- BZOJ1996:[HNOI2010]CHORUS 合唱队(区间DP)
Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Output 8 HINT Solution 辣鸡guide真难用 ...
随机推荐
- txt文本文件记录日志
private static void Log(string content, string fileName="log.txt") { string logsPath = App ...
- MySQL绿色版安装
下载MySQL绿色版 去官方下载mysql.,我下载的是 mysql-5.6.27-winx64,下载后解压缩到D:盘. 安装MySQL服务 拷贝my-default.ini重命名为my.ini,修改 ...
- TJ4运行环境
http://springwq2011.blog.51cto.com/4332889/966028 http://blog.csdn.net/u013573789/article/details/45 ...
- JQuery 验证框架
设计完美,可扩展性好,以后就用他了. http://docs.jquery.com/Plugins/Validation /**//** * @author ming */ $(document) ...
- zabbix客户端一键安装脚本(主动模式监控)
#!/bin/bash basepath=$(cd `dirname $0`; pwd)SHELL_DIR="${basepath}/shell"PACKAGE_DIR=" ...
- 描述进程的PCB
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- 940B Our Tanya is Crying Out Loud
传送门 题目大意 给你n,k,A,B四个数,x=n,有两种操作: 1.将x-1,需支付A个金币 2.将x÷k,需支付B个金币,当且仅当k能整除x时可进行此操作 问将x修改为1至少要花几个金币 分析 模 ...
- [记录]一则清理MySQL大表以释放磁盘空间的案例
一则清理MySQL大表以释放磁盘空间的案例 一.基本情况: 1.dbtest库554G,先清理st_online_time_away_ds(37G)表的数据,保留半年的数据: 1)删除的数据:sele ...
- mac中配置jdk环境
- 简单模拟一下ab压力测试
简单了解下ab ab全程是apache benchmark,是apache官方推出的一个工具,创建多个并发访问线程,模拟多个访问者同时对一个URL地址进行访问.它的测试目标是基于URL的,因此它既可以 ...