【2020牛客多校5:D】Drop Voicing(LIS+推理)
传送门
- 题目
给定一个长度为n(2≤n≤500)n(2≤n≤500)n(2≤n≤500)的排列a[0...n−1]a[0...n-1]a[0...n−1],有两种操作:
1、drop-2:将倒数第二个数移到最前面
2、invert:将第一个数移到最后面
且连续的drop-2操作称为multi-drop,问最少需要多少个multi-drop操作,使得此排列为升序(即最终的排列为1,2,…,n) - 思路
称连续的invert操作为multi-invert,可以发现将一个数移到任一位置需要最多1个multi-drop操作和多个multi-invert操作。
如x1x2x3x4x5x6x7x_1x_2x_3x_4x_5x_6x_7x1x2x3x4x5x6x7,现在要把x4x_4x4移到x5x_5x5和x6x_6x6之间
(1)将x1x_1x1~x5x_5x5移到后面:x6x7x1x2x3x4x5x_6x_7x_1x_2x_3x_4x_5x6x7x1x2x3x4x5,1次multi-invert
(2)将x6x_6x6~x3x_3x3移到后面:x4x5x6x7x1x2x3x_4x_5x_6x_7x_1x_2x_3x4x5x6x7x1x2x3,1次multi-invert
(3)将x6x_6x6~x2x_2x2移到前面:x6x7x1x2x4x5x3x_6x_7x_1x_2x_4x_5x_3x6x7x1x2x4x5x3,1次multi-drop
(4)将x6x_6x6~x7x_7x7移到后面:x1x2x4x5x3x6x7x_1x_2x_4x_5x_3x_6x_7x1x2x4x5x3x6x7,1次multi-invert
考虑排列的LIS,对于不属于LIS的数字,最多使用一次multi-drop,将其移到合适的位置,使得len(LIS)+1,那么答案就是n-len(LIS)。
由于multi-invert操作的次数不计入答案,每次将原排列的前i个(0≤i≤n-1)个数移到后面,得到n个排列,对于每个排列求LIS,最终的ans=min{n-len(LIS)}; - ac代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e2 + 10;
int n;
int dp[maxn];
int a[maxn], b[maxn];
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);scanf("%d", &n);for(int i = 0; i < n; i++) scanf("%d", &a[i]);int ans = INT_MAX;for(int k = 0; k < n; k++){for(int i = 0; i < n; i++) b[(i+n-1-k+n)%n] = a[i];dp[0] = 1;for(int i = 1; i < n; i++){dp[i] = 1;for(int j = 0; j < i; j++)if(b[i]>b[j]) dp[i] = max(dp[i], dp[j]+1);}int lis = 1;for(int i = 0; i < n; i++) lis = max(lis, dp[i]);ans = min(ans, n-lis);}printf("%d\n", ans);return 0;
}
【2020牛客多校5:D】Drop Voicing(LIS+推理)相关推荐
- 2020 牛客多校第一场
2020 牛客多校第一场 A. B-Suffix Array 后缀数组的思想:倍增+桶排序的方式找出一串连续序列后缀的大小.虽说正常使用的时候都是字典序,但是只要修改排序方式,也能够达到一个类似的&q ...
- 2020牛客多校 J Easy Integration 计算过程详解【点火公式(Wallis积分)+组合数学】
2020牛客暑期多校训练营(第一场) J Easy Integration 题 网上题解大多是 不断分部积分求解,其实有更为简洁的解法. 便是 Wallis积分(点火公式) + 组合数学 求解,本文给 ...
- [2020牛客多校第一场]Coda的题解集
被暴打了. 会先写比赛中过题数100+的题目,其他的以后再补. 施工中,未完待续- F Infinite String Comparision 一开始想到的是对比到lcm(|a|,|b|),意料之中T ...
- 2020牛客多校联赛第四场 (BFH)
文章目录 B:Basic Gcd Problem 题目 翻译 例子 大意 思路 代码 F:Finding the Order 题目 翻译 例子 大意 思路 代码 H:Harder Gcd Proble ...
- 2020牛客多校第1场H-Minimum-cost Flow
解题思路: 首先我们要从费用流mcmf的算法入手:因为它每次增广是再费用增广路上跑的,根据贪心的思想费用小的路基本上能运多少就尽量运多少,所以我们可以假设初始的边容量是1,只跑一遍mcmf.记录一下每 ...
- 数论分块 ---- 2020牛客多校第7场H-Dividing[思维+数论分块]
题目大意: 解题思路:很明显满足条件的点是n%k==0∣∣n%k==1n\%k==0||n\%k==1n%k==0∣∣n%k==1 1.因为nnn是从111开始的如果一直乘以k[n=n∗k]k[n=n ...
- 2020牛客多校第7场C-A National Pandemic[树链剖分+思维]
题目大意 1.首先我们看一下操作1:实际上可以说成在所有位置上加上w−dist(x,y)w-dist(x,y)w−dist(x,y),因为dist(x,x)=0dist(x,x)=0dist(x,x) ...
- 2020牛客多校第一场B虚树+质数筛+换根dp
题目大意: 1.可以发现阶乘增长是很快的所以你要把整颗树建立出来是不实际的. 2.我们可以假设这棵树已经建出来出来了我们应该怎么搞 首先很明显是一个树形dp, 我们设dp[j],是以j为u到其他点距离 ...
- 2020牛客多校第5场B-Graph完全图异或最小生成树
因为这里边是可以任意加的但是要保证联通性所有这里可以看成一个完全图,每条边的权值=a[u]^a[v] 1.那么我们可以将每个点的权值sort一遍,将每个a[i],从高位到低位,按照最高位的1出现的顺序 ...
- 2020牛客多校G[并查集的两种思想,按秩合并+路径压缩]
题目链接 题目大意:就是有n个点m条边,每次第i个点属于第i个联通块,现在有q次询问给你一个数o,如果o这个联通块没有相连的联通块就没什么事情发生,如果有的话,就将这几个点的联通块都并入o所在的联通块 ...
最新文章
- 【《Objective-C基础教程 》笔记】(八)OC的基本事实和OC杂七杂八的疑问
- Smack Component 多线程环境下的问题解决
- java基础学习总结——对象转型
- 产品经理们是如何越过 iOS 沙盒机制的?
- C++const类型的引用参数
- 我的css家园博客开通了
- 用GDB调试程序(10)──查看运行时数据(1)-转
- python怎么读发音百度翻译-用python实现百度翻译
- socket状态不对是什么意思_无极状态,“太极状态”“无极生太极”都是什么意思?...
- Win10PE纯净版制作过程
- 《阿甘正传》英文原版剧本(场景+台词)(看电影学英语的最佳材料)
- Tinker 合并及加载补丁过程源码分析 (三)
- Python一键清空购物车
- 棒球·飞盘·MLB棒球创造营
- jenkins-RestAPI调用出现Error 403 No valid crumb was included in the request解决方法
- 2019网名最新版的
- Altium Designer输出GERBER文件与华秋DFM对比
- idea打开文件关联目录
- SREng 使用实例(一)如何禁用360杀毒软件
- justauth-spring-boot-starter V1.3.5 发布成功
热门文章
- itemCF matlab算法,推荐系统初探:ItemCF算法实现知乎问题推荐
- python数据保存为excel_Python读excel生成数据存入txt文件
- 关于依赖注入必备的初步知识
- java内存结构不包含堆,JVM之详细分析java内存结构模型
- c++频繁读取数据会丢失_AMADA数控冲床255参数丢失故障
- 【转】JQuery中$.each 和$(selector).each()的区别详解
- 使用 Fiddler 分析网页加载过程
- ORACLE常用性能监控SQL
- Android 虚线切割线
- POJ Building roads [二分答案 2SAT]