luogu P5414 [YNOI2019]排序 |动态规划
题目描述
对于一个数列{7, 1, 2, 3}进行排序,我们可以把7 从头移动到尾。但是这个操作的成本是7,并不是最佳的。最佳的排序方式是将连续的1、2、3 移动到7 的前面。这样的话,总的操作成本就是1+2+3=6,比之前的成本7 要小。
你的任务是,对于一个给定的数列,输出对这个数列进行排序的最小成本。
输入格式
输入文件名为sort.in。
每个输入文件包含多组数据。
输入文件的第一行,包含一个正整数T,代表该输入文件中所含的数据组数。
接下来是T组数据,每组数据的格式如下:
每组数据包含2 行;
第一行包含一个正整数n,代表数列中元素的个数,其中0 < n ≤ 102;
第二行包含n个整数,两个数之间以一个空格隔开,代表数列中的元素ki,其中−107-10^{7}−107 ≤ ki ≤ 10710^{7}107。
输出格式
输出文件名为sort.out。
输出文件包含T行,分别对应T组数据的答案,即对数列进行排序的最小成本。
说明/提示
对于60%的数据:0 < n ≤ 60,−107-10^{7}−107 ≤ ki ≤ 10710^{7}107
对于80%的数据:0 < n ≤ 80, −107-10^{7}−107 ≤ ki ≤ 10710^{7}107
对于100%的数据:0 < n ≤ 102,−107-10^{7}−107 ≤ ki ≤ 10710^{7}10
这道题就是移动几个数字使得数列单调上升,每次移动可以移动到任意位置,花费就是移动数字的大小。
看到这个题之后,我们可以得到 得不到的洗洗睡吧 :最优解不可能把同一个数字移动2次及以上。既然我们可以一次把它移到正确的位置上,那么这个数字就可以理解为直接被移走了。
那么问题就变成了:删除几个数字,使得数列单调递增,所求的是移走数字的最小和。 使得删除的和最小,就意味着留下的和最大。
那么问题就变成了:保留几个单调递增的数字,使得和最大。
#include<map>
#include<ctime>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
inline int read(){
int x=0; char c=getchar();
while(c<'0'||c>'9')c=getchar();
while('0'<=c&&c<='9'){ x=(x<<3)+(x<<1)+(c^48); c=getchar();}
return x;
}
const int N=205;
int a[N],dp[N];
signed main(){
register int i,j; int n;
for(int T=read(),sum=0,ans=0;T;T--,sum=0,ans=0){
n=read(); for(i=1;i<=n;i++){
a[i]=read(),sum+=a[i];
for(j=1;j<i;j++)if(a[j]<=a[i]&&dp[i]<dp[j])dp[i]=dp[j];
dp[i]+=a[i];
}
for(i=1;i<=n;i++)ans=max(ans,dp[i]);
printf("%d\n",sum-ans);
}
}
luogu P5414 [YNOI2019]排序 |动态规划的更多相关文章
- p5414 [YNOI2019]排序
分析 这是真正的云南oi/px 我们需要考虑保留一段不降子序列 剩余的自由往前往后移动 所以dp一下即可 代码 #include<bits/stdc++.h> using namespac ...
- CJOJ 1644 编辑距离 / Luogu 2758 编辑距离(动态规划)
CJOJ 1644 编辑距离 / Luogu 2758 编辑距离(动态规划) Description 字符串是数据结构和计算机语言里很重要的数据类型,在计算机语言中,对于字符串我们有很多的操作定义,因 ...
- luogu 1327 数列排序 & 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 J题 循环节
luogu 1327 数列排序 题意 给定一个数列\(\{an\}\),这个数列满足\(ai≠aj(i≠j)\),现在要求你把这个数列从小到大排序,每次允许你交换其中任意一对数,请问最少需要几次交换? ...
- Luogu[YNOI2019]排序(DP,线段树)
要最优?就要一步到位,不能做"马后炮",走"回头路",因此将序列映射到一个假定最优序列,发现移动原序列等价于删除原序列元素,以便生成最大不下降子序列.可线段树维 ...
- Luogu P3165 [CQOI2014]排序机械臂
先讲一下和这题一起四倍经验的题: Luogu P4402 [Cerc2007]robotic sort 机械排序 SP2059 CERC07S - Robotic Sort UVA1402 Robot ...
- Luogu 1093 - 奖学金 - [排序水题]
题目链接:https://www.luogu.org/problemnew/show/P1093 题目描述某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生 ...
- Luogu 2679 子串 (动态规划)
Luogu 2679 NOIP 2015 子串 (动态规划) Description 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k ...
- bzoj 1093 最大半连通子图 - Tarjan - 拓扑排序 - 动态规划
一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向路径.若G'=(V ...
- Luogu 2577[ZJOI2005]午餐 - 动态规划
Solution 啊... 我太菜了唔 不看题解是不可能的, 这辈子都不可能的. 首先一个队伍中排队轮到某个人的时间是递增的, 又要加上吃饭时间, 所以只能使吃饭时间递减, 才能满足最优,于是以吃饭时 ...
随机推荐
- 最新JetBrains PyCharm 使用教程--创建或导入项目(二)
Python简介 Python是一种非常流行的开源编程语言.得益于无尽的模块选项,Python今天广泛用于脚本语言.Web开发.移动和桌面在许多领域.随着人工智能的复兴,数据科学的崛起,Python更 ...
- 猫眼电影App抓包获取评论数据接口
之前在CSDN程序人生公众号上看到了这篇文章<邪不压正>评分持续走低,上万条网友评论揭秘,是救救姜文还是救救观众?,文中提到了通过抓包猫眼App发现了评论的数据接口:http://m.m ...
- nyoj 111-分数加减法 (gcd, switch, 模拟,数学)
111-分数加减法 内存限制:64MB 时间限制:1000ms 特判: No 通过数:20 提交数:54 难度:2 题目描述: 编写一个C程序,实现两个分数的加减法 输入描述: 输入包含多行数据 每行 ...
- 神奇的 SQL 之 MySQL 性能分析神器 → EXPLAIN,SQL 起飞的基石!
前言 开心一刻 某人养了一头猪,烦了想放生,可是猪认识回家的路,放生几次它都自己回来了.一日,这个人想了个狠办法,开车带着猪转了好多路进山区放生,放生后又各种打转,然后掏出电话给家里人打了个电话,问道 ...
- Redshitf Install
创建VPC 和 子网和internet网关(子网需开启自动分配公网IP,VPN 需添加到internet网关的路由) 创建安全组: 创建cluster subnet Group; 创建redshift ...
- DDCTF2019 的四道题wp
MIsc:流量分析 这道题,在比赛的时候就差个key了,但是没想到要改高度,后来群里师傅说了下,就再试试, 导出来改高度. 导出来,把 把%5c(4)前面的hex删掉,改成png,就直接拿去那个img ...
- node后台初始配置(2)
一.node-app结构 创建成功node-app项目后,会自动生成一些文件一般初始的结构如下图 在bin文件夹里面只有一个文件www var port = normalizePort(pr ...
- python3基础之 字符串切片
一.python3中,可迭代对象有:列表.元组.字典.字符串:常结合for循环使用:均可使用索引切片 实例: str = ' #str[start:stop:step] 遵循[左闭右开]规则 prin ...
- github下载历史版本--xdd
第一步 打开一个仓库,可以看到此时在主分支下,点击1位置查看历史版本 第二步 现在可以查看到所有的版本(提交)信息,单击2位置进入该版本 第三步 单击3位置浏览并打开该版本 第四步 进入该版本之后,可 ...
- Lab6:进程的调度
CPU调度 从就绪队列中挑选下一个占用CPU运行的进程,从多个可用CPU中挑选就绪进程可使用的CPU资源 调度策略 比较调度算法的准则 CPU使用率 吞吐量 周转时间 就绪等待时间 响应时间 吞吐量与 ...