RQNOJ 201 奥运大包围:LIS + 拼链成环
题目链接:https://www.rqnoj.cn/problem/201
题意:
开始时n(n<=1000)个人手拉手围成一个圈。
后来这些人中的一些按顺序向里面出圈形成一个新圈。从而使原圈形成一个从高到低,最低与最高连接的圈。
新圈重复相同的操作,直到没有人要出圈为止。
问最少要形成多少个这样的圈。
题解:
(1)拼链成环:
对于一个环,可以用两条由环拆开的链拼在一起表示。
例如:有一个环为"1,2,3,4"(1和4连在一起),则可以表示为"1,2,3,4,1,2,3"。
每一次从不同位置遍历环时,只需要枚举前n个点作为起点,向后遍历n个即可。
(2)转化问题:
原题可以变成:求最少有几个相互不重叠的严格下降子序列,能够将最初的环完全覆盖。
(3)设计算法:
首先有一个定理:下降子序列的个数 = 最长非降子序列的长度
那么此题跟NOIP拦截导弹的第二问就一模一样了。
所以枚举每个起点,求一下最小的LIS(非降)就好啦。
因为n<=1000,所以求LIS要用nlogn的方法。总复杂度O(N^2*logn)。
AC Code:
- #include <iostream>
- #include <stdio.h>
- #include <string.h>
- #define MAX_N 2005
- #define INF 10000000
- using namespace std;
- int n;
- int ans;
- int a[MAX_N];
- int d[MAX_N];
- void read()
- {
- cin>>n;
- for(int i=;i<n;i++)
- {
- cin>>a[i];
- a[n+i]=a[i];
- }
- }
- int cal_lis(int *a)
- {
- int len=;
- d[]=a[];
- for(int i=;i<n;i++)
- {
- if(a[i]>=d[len])
- {
- d[++len]=a[i];
- }
- else
- {
- int lef=;
- int rig=len;
- while(rig-lef>)
- {
- int mid=(lef+rig)/;
- if(a[i]>=d[mid]) lef=mid;
- else rig=mid;
- }
- int res;
- if(a[i]>=d[rig]) res=rig;
- else if(a[i]>=d[lef]) res=lef;
- else res=;
- d[res+]=min(d[res+],a[i]);
- }
- }
- return len;
- }
- void solve()
- {
- ans=INF;
- for(int i=;i<n;i++)
- {
- ans=min(ans,cal_lis(a+i));
- }
- }
- void print()
- {
- cout<<ans<<endl;
- }
- int main()
- {
- read();
- solve();
- print();
- }
RQNOJ 201 奥运大包围:LIS + 拼链成环的更多相关文章
- POJ 1065 Wooden Sticks(LIS,最少链划分)
题意:求二维偏序的最少链划分. 用到Dilworth定理:最少链划分=最长反链.(对偶也成立,个人认为区别只是一个维度上的两个方向,写了个简单的证明 相关概念:偏序集,链,反链等等概念可以参考这里:h ...
- RQNOJ 202 奥运火炬登珠峰:01背包
题目链接:https://www.rqnoj.cn/problem/202 题意: 登珠峰需要携带a(L)O2和t(L)N2. 有n个气缸可供选择.其中第i个气缸能装下a[i](L)O2和t[i](L ...
- hdu1051(LIS | Dilworth定理)
这题根据的Dilworth定理,链的最小个数=反链的最大长度 , 然后就是排序LIS了 链-反链-Dilworth定理 hdu1051 #include <iostream> #inclu ...
- 数据结构导论 四 线性表的顺序存储VS链式存储
前几章已经介绍到了顺序存储.链式存储 顺序存储:初始化.插入.删除.定位 链式存储:初始化.插入.删除.定位 顺序存储:初始化 strudt student{ int ID://ID char nam ...
- dp专题练习
顺便开另外一篇放一些学过的各种dp dp总结:https://www.cnblogs.com/henry-1202/p/9194066.html 开坑先放15道题,后面慢慢补 目标50道题啦~~,目前 ...
- 谈谈我近一个半月的dp练习
前请提示:https://www.cnblogs.com/caiyishuai/p/9047991.html 配合这篇文章食用风味更佳哦! 首先十分感谢henry_y提供的50道dp练习,链接在这 ...
- Nowcoder | [题解-N165]牛客网NOIP赛前集训营-普及组(第二场)
啊...表示一大早还没睡醒就开始打比赛(开始前一分钟的我还在桌子上趴着休眠)...表示题目思路清奇(尤其C题)...但是我还是太蒻了...\(D\)题暴力都没打...题解正式开始之前先\(\%\)一下 ...
- 「LOJ2000~2023」各省省选题选做
「LOJ2000~2023」各省省选题选做 「SDOI2017」数字表格 莫比乌斯反演. 「SDOI2017」树点涂色 咕咕咕. 「SDOI2017」序列计数 多项式快速幂. 我们将超过 \(p\) ...
- [BZOJ1122][POI2008]账本BBB 单调队列+后缀和
Description 一个长度为n的记账单,+表示存¥1,-表示取¥1.现在发现记账单有问题.一开始本来已经存了¥p,并且知道最后账户上还有¥q.你要把记账单修改正确,使得 1:账户永远不会出现负数 ...
随机推荐
- QQ空间魔力日志大全SduSRZ
大家好~最近,在QQ空间里出现了一种神奇的日志,谁看显示谁的信息,在个人中心显示的是一张图片,在日志里显示的又是另一张图片.这就是传说中的魔力日志.魔力日志从今年的9月份开始盛行,因为具有谁看就针对谁 ...
- Rsync:一个很实用的文件同步命令
sync是Linux系统下的文件同步和数据传输工具,可用于同步文件.代码发布 1.安装. yum install -y xinetd yum insatll -y rsync 2.配置 打开rsync ...
- python web开发之django
上一篇介绍了python-web.py的开发,本节课我们详细说明django的开发与使用. 简介及可以学习到的内容: 1.Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表 ...
- 富文本编辑器UEditor自定义工具栏(二、插入图片、音频、视频个性化功能按钮和弹层及自定义分页符)
导读:本篇将简单探讨插入图片.音频.视频的功能按钮实现方式 传送门:富文本编辑器UEditor自定义工具栏(一.基础配置与字体.背景色.行间距.超链接实现) 一.效果图 1.UEditor自定义工具栏 ...
- Windows7 下安装 tersorflow
最近看起深度学习的一些知识,想要学习一个框架.在网上看了别人对这些框架的评比后,决定学习 tersorflow.之前一直以为 tersorflow 只可以在 Linux 下安装,出乎意料的是,Wind ...
- (转)Java并发编程:Callable、Future和FutureTask
Java并发编程:Callable.Future和FutureTask 在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一 ...
- Go语言学习笔记(五)文件操作
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 文件读取 os.File 封装了文件相关操作 type File File代表一个打开的文件对象. func Cr ...
- CSS随笔1(CSS常用样式)
样式 属性 大小 font-size(x-large ; xx-small ; 可用数值单位 : PX,PD) 样式 font-style(oblique 偏斜体 : italic 斜体 : norm ...
- robot framework 怎么点击文本总结
点击文本有一下几种方式 1.
- [js高手之路] es6系列教程 - var, let, const详解
function show( flag ){ console.log( a ); if( flag ){ var a = 'ghostwu'; return a; } else { console.l ...