题目链接: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 + 拼链成环的更多相关文章

  1. POJ 1065 Wooden Sticks(LIS,最少链划分)

    题意:求二维偏序的最少链划分. 用到Dilworth定理:最少链划分=最长反链.(对偶也成立,个人认为区别只是一个维度上的两个方向,写了个简单的证明 相关概念:偏序集,链,反链等等概念可以参考这里:h ...

  2. RQNOJ 202 奥运火炬登珠峰:01背包

    题目链接:https://www.rqnoj.cn/problem/202 题意: 登珠峰需要携带a(L)O2和t(L)N2. 有n个气缸可供选择.其中第i个气缸能装下a[i](L)O2和t[i](L ...

  3. hdu1051(LIS | Dilworth定理)

    这题根据的Dilworth定理,链的最小个数=反链的最大长度 , 然后就是排序LIS了 链-反链-Dilworth定理 hdu1051 #include <iostream> #inclu ...

  4. 数据结构导论 四 线性表的顺序存储VS链式存储

    前几章已经介绍到了顺序存储.链式存储 顺序存储:初始化.插入.删除.定位 链式存储:初始化.插入.删除.定位 顺序存储:初始化 strudt student{ int ID://ID char nam ...

  5. dp专题练习

    顺便开另外一篇放一些学过的各种dp dp总结:https://www.cnblogs.com/henry-1202/p/9194066.html 开坑先放15道题,后面慢慢补 目标50道题啦~~,目前 ...

  6. 谈谈我近一个半月的dp练习

    前请提示:https://www.cnblogs.com/caiyishuai/p/9047991.html   配合这篇文章食用风味更佳哦! 首先十分感谢henry_y提供的50道dp练习,链接在这 ...

  7. Nowcoder | [题解-N165]牛客网NOIP赛前集训营-普及组(第二场)

    啊...表示一大早还没睡醒就开始打比赛(开始前一分钟的我还在桌子上趴着休眠)...表示题目思路清奇(尤其C题)...但是我还是太蒻了...\(D\)题暴力都没打...题解正式开始之前先\(\%\)一下 ...

  8. 「LOJ2000~2023」各省省选题选做

    「LOJ2000~2023」各省省选题选做 「SDOI2017」数字表格 莫比乌斯反演. 「SDOI2017」树点涂色 咕咕咕. 「SDOI2017」序列计数 多项式快速幂. 我们将超过 \(p\) ...

  9. [BZOJ1122][POI2008]账本BBB 单调队列+后缀和

    Description 一个长度为n的记账单,+表示存¥1,-表示取¥1.现在发现记账单有问题.一开始本来已经存了¥p,并且知道最后账户上还有¥q.你要把记账单修改正确,使得 1:账户永远不会出现负数 ...

随机推荐

  1. 在Linux下安装Oracle12c

    其实,对于oracle数据库和oracle实例的安装,借用图形化安装还是比较容易的,只是有个别地方需要特别注意外,其余的默认安装即可: 1.安装前的准备: 启动SSH工具: 先启动倒数第三个(想用图像 ...

  2. (转)通过Net-Speeder为搬瓦工提升网速

    为了解决丢包问题,最简单粗暴的方法就是双倍发送,即同一份数据包发送两份.这样的话在服务器带宽充足情况下,丢包率会平方级降低.直接优点是降低丢包率,直接缺点是耗费双倍流量.一些延伸影响是更容易触发快速恢 ...

  3. 【CSS3】使用CSS3线性渐变实现图片闪光划过效果(转)

    原文:http://www.nowamagic.net/librarys/veda/detail/2600 资料参考: http://www.cnblogs.com/lhb25/archive/201 ...

  4. HDU-4787 GRE Words Revenge 解题报告

    这是我之前博客里提到的一道AC自动机的练手题,但是要完成这道题,我之前博客里提到的东西还不够,这里总结一下这道题. 这道题不是一般的裸的AC自动机,它的询问和插入是交叉出现的所以用我之前写的板子不大合 ...

  5. 一张图告诉你最流行的 7 个 JavaScript框架特点

    欢迎大家持续关注葡萄城控件技术团队博客,更多更好的原创文章尽在这里~~​ AngularJ.js                                                  由g ...

  6. 关于第一次STM32连接电脑下载程序

    安装了Keil(ARM)版本之后,不管是自己编程,还是配套的程序运行.我们都想把它下载到STM32芯片里面,在板子上运行.这里介绍几种方法. 1.用J-LINK下载调试. 这个工具,可以直接点击kei ...

  7. zabbix前台jsrpc注入

    zabbix是一个开源的企业级性能监控解决方案. 官方网站:http://www.zabbix.com zabbix的jsrpc的profileIdx2参数存在insert方式的SQL注入漏洞,攻击者 ...

  8. Xamarin.Forms(二) 返回页面的数据刷新

    这几天在做一个课程表的小程序,遇到了这样一个问题: app打开便是课程表的页面,如果课程表页面没有数据的话需要跳转到同步课表页面模拟登陆教务管理系统获取课表,并显示在课程表页面,这样就需要从同步课表页 ...

  9. Java微信开发_02_本地服务器映射外网

    一.工具列表 内网穿透的相关工具有: (1)natapp 官网 :https://natapp.cn/ (2)花生壳 官网:https://console.oray.com/ (2)ngrok 官网: ...

  10. 以太网帧、TCP与UDP段以及IP数据报格式总结

    传输层及其以下的机制由内核提供,是操作系统的一部分,应⽤层由⽤户进程提供应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装.不同的协议层对数据包有不同的称谓,在传 ...