[CDOJ887]轻音乐同好会(跳石头)
此题已经无法在UESTC上上传,网上只有玄学题解
题目
题目描述
雪菜为了能让冬马参加轻音乐同好会,瞒着春希,和冬马见面。
为了增进感情,雪菜拉着还没缓过神来的冬马进了游戏厅……
游戏要求两名玩家在排成一排的石头上跳跃前进,每个石头有一个高度,玩家只能向右跳,并且不能跳向比自己所在位置的石头矮的石头。一个石头在一个玩家跳离后就会消失,并且两个玩家不能同时站在同一个石头上。游戏分数为两个玩家站过的石头的总数。游戏起始,两名玩家都可以任选一个石头作为开始位置(当然不能相同)。
由于冬马是挂科专家,雪菜又只有英语好,所以她们两人想请你帮助他们,怎么才能让分数最高。
Input
第一行一个整数 \(n\),表示有 \(n\)个石头。\((2 \le n \le 1000)\)
第二行 \(n\) 个整数,表示从左到右第 \(i\) 个石头的高度 \(H_i\)。\((H_i \le109)\)
Output
一个整数,表示最高能得到的分数。
解析
题目大意
求两个元素不重复的最长不降子序列的长度
分析
显然如果一个人已经确定了跳的石头,第二个人一定跳的是最长不降子序列。以为两个人地位对等,因此可以确定两个人跳的都是最长不降子序列。
但如果直接做两遍最长不降子序列,不能保证你当前选取的最长不降子序列不会影响第二次最长不降子序列的大小,所以显然是错误的
考虑遍历所有第一个人会取的最长不降子序列,打完标记之后,再跑第二个人最长不降子序列
方法一:
先跑一遍求LIS,然后记录下这个值,然后维护多个队列记录所有的长度为这个的情况,然后枚举再做一遍。
复杂度\(nlog^2(n)\)
方法二:
使用用单调队列,动态维护所有情况,具体方法:
对于第 \(i\) 个元素, 二分在队列中找到一个刚好比它大的位置记为 \(j\),进行替换,显然,\(h[1...j-1]\) 能与这第 \(i\) 个元素构成长度为 \(j\) 的子序列,并且,这种长度为 \(j\) 的子序列优于原始的子序列。显然,当我们的队列长度更新的时候,我们能选取的最长序列就是这个长度。
对于被替换的元素, 我们将其下放一层,进入下一层单调队列进行同等操作。由于性质的类似性,我们能证明这种操作是正确的。
于是,我们将这个问题推广到了 \(k\) 维:求 \(k\) 个元素不重复的最长不降子序列的长度;
复杂度\(nlogn\)
代码
注意:\(t[i]\)表示第 \(i\) 层的队列长度; \(q[i]\)表示第 \(i\) 层
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
#define N 5005
int n, i, x, t[N];
int q[N][N];
void up(int p, int x) {
if (x >= q[p][t[p]]) { q[p][++t[p]] = x; return; }
int l = 1, r = t[p], mid, u;
while (l <= r) {
if (q[p][mid = (l + r) >> 1] > x) {
u = mid; r = mid - 1;
} else l = mid + 1;
}
up(p + 1, q[p][u]), q[p][u] = x;
}
int main() {
scanf("%d", &n);
for (i = 1; i <= n; ++ i) scanf("%d",&x), up(1,x);
for (int i = 1; ; ++ i) {
t[i] += t[i - 1];
if (t[i] == n) break;
}
printf("%d", t[2]);
return 0;
}
[CDOJ887]轻音乐同好会(跳石头)的更多相关文章
- NOIP2015跳石头[二分答案]
题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选 择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩石( ...
- [NOIP2015] 提高组 洛谷P2678 跳石头
题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩石(不 ...
- NOIP2015 跳石头
一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N块岩石(不含起点和终点的岩石). ...
- NOIP 2015复赛提高组Day2 T1==Codevs 4768 跳石头
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中 ...
- UOJ #148. 【NOIP2015】跳石头 二分
#148. [NOIP2015]跳石头 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://uoj.ac/problem/148 Descripti ...
- c++二分答案 之 跳石头
题目: 题目描述 Description 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之 ...
- Codevs 4768 跳石头 NOIP2015 DAY2 T1
4768 跳石头 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 一年一度的"跳石头"比赛又要开始了! ...
- Vijos 1981 跳石头 二分
描述 一年一度的"跳石头"比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩 ...
- 洛谷 P2678 & [NOIP2015提高组] 跳石头
题目链接 https://www.luogu.org/problemnew/show/P2678 题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布 ...
随机推荐
- sencha touch 扩展篇之使用sass自定义主题样式 (下)通过css修改官方组件样式以及自定义图标
上一讲我们讲解了如何使用官方的api来修改主题样式,这讲我们继续讲解sass的样式修改, 编译官方自带的主题包 在生成的项目以及官方sdk的目录下,自带了一些主题sass包,我们也可以通过修改sas ...
- Minix2.0内核源代码的组织结构
Minix2.0操作系统的源代码由两个目录组成:include/目录和src/目录 include/目录包含了操作系统所有的头文件(即.h文件) src/目录下包含了操作系统所有的源文件(.c或.s文 ...
- EUI组件之EditableText
一.EditableText常规使用 EditableText是一个可输入文本,例如登陆时输入用户名.密码等. 拖动EditableText到exml即可 实际效果 其他: 1.输入密码框 设置inp ...
- Egret打包App 修改App名称和图标 (Egret4.1.0)
图标替换位置在项目res下的drawable这些目录下,用新图标覆盖即可. 这里我用白色图片替换了白鹭默认的图片ic_launcher.png 修改App名字,在res->value->s ...
- 利用trace重建控制文件
以下步骤,内容都在ora11g_ora_.trc文件中 CREATE CONTROLFILE REUSE DATABASE "ORA11G" NORESETLOGS ARCHIV ...
- 获取鼠标经过位置的X、Y坐标
利用JavaScript获取鼠标经过位置的X.Y坐标方法. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...
- 170529、springMVC 的工作原理和机制
工作原理上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web. ...
- CentOS中为新用户添加sudo权限
1.切换成root权限 su root 2.查看/etc/sudoers文件权限,如果只读权限,修改为可写权限 ls -l /etc/sudoers 3.如果是只读进行如下操作 chmod /etc/ ...
- ASM学习记录
代理: 代理模式: 静态代理: 动态代理:是指在运行期动态的为指定的类生成其代理类.(需要相关的运行时编译技术) Javassist:Javassist是一个运行时编译库,他能动态的生成或修改类的字节 ...
- AttributeError: 'module' object has no attribute 'face'
报错 raceback (most recent call last): File "D:/work/python/face_ai/predict.py", line 41, in ...