1049: [HAOI2006]数字序列 - BZOJ
Description
现在我们有一个长度为n的整数序列A。但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列。但是不希望改变过多的数,也不希望改变的幅度太大。
Input
第一行包含一个数n,接下来n个整数按顺序描述每一项的键值。
Output
第一行一个整数表示最少需要改变多少个数。 第二行一个整数,表示在改变的数最少的情况下,每个数改变的绝对值之和的最小值。
Sample Input
4
5 2 3 5
Sample Output
1
4
【数据范围】
90%的数据n<=6000。
100%的数据n<=35000。
保证所有数列是随机的。
这个算法的复杂度真的是O(n^2)吗?怎么我觉得不对呢
和机房的小伙伴讨论之后,觉得这个复杂度应该是O(n^3)的(虽然跑得很快)
先转换一下,b[i]=a[i]-i,然后就是求b的最长不下降了,这样好算代价一些
cost[i]=cost[j]+w(j,i)(f[j]=f[i]-1,j<i)
计算w的时候有一个定理,肯定有一种最优方案是把左半边变成b[j]右半边变成b[i]
证明:http://pan.baidu.com/share/link?uk=2651016602&shareid=1490516411
const
maxn=;
inf=;
var
a,f,b,first,next,last:array[..maxn]of longint;
g:array[..maxn]of int64;
n,tot,max:longint; procedure insert(x,y:longint);
begin
inc(tot);
last[tot]:=y;
next[tot]:=first[x];
first[x]:=tot;
end; procedure find(x:longint);
var
l,r,mid:longint;
begin
l:=;
r:=n;
while l<>r do
begin
mid:=(l+r)>>;
if b[mid]>a[x] then r:=mid
else l:=mid+;
end;
if max<l then max:=l;
f[x]:=l;
b[l]:=a[x];
insert(l,x);
end; procedure init;
var
i:longint;
begin
read(n);
for i:= to n do
begin
read(a[i]);
dec(a[i],i);
end;
inc(n);
a[n]:=inf-;
a[]:=-inf;
for i:= to n do
b[i]:=inf;
insert(,);
end; function calc(l,r:longint):int64;
var
i:longint;
s:int64;
begin
s:=;
for i:=l to r do
inc(s,abs(a[i]-a[r]));
calc:=s;
for i:=l to r do
begin
s:=s-abs(a[i]-a[r])+abs(a[i]-a[l]);
if calc>s then calc:=s;
end;
end; procedure work;
var
i,j:longint;
num:int64;
begin
for i:= to n do
begin
find(i);
g[i]:=inf*inf;
j:=first[f[i]-];
while j<> do
begin
if a[last[j]]<=a[i] then
begin
num:=calc(last[j],i);
if g[i]>g[last[j]]+num then g[i]:=g[last[j]]+num;
end;
j:=next[j];
end;
end;
writeln(n-max);
write(g[n]);
end; begin
init;
work;
end.
pascal第三(前两名是怎么回事......)
1049: [HAOI2006]数字序列 - BZOJ的更多相关文章
- 【BZOJ 1049】 1049: [HAOI2006]数字序列 (LIS+动态规划)
1049: [HAOI2006]数字序列 Description 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变 ...
- bzoj 1049 [HAOI2006]数字序列
[bzoj1049][HAOI2006]数字序列 Description 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不 ...
- 【BZOJ】1049: [HAOI2006]数字序列(lis+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1049 题意:给一个长度为n的整数序列.把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希 ...
- bzoj 1049: [HAOI2006]数字序列【dp+二分+瞎搞】
第一问明显就是用b[i]=a[i]-i来做最长不下降子序列 然后第二问,对于一对f[i]=f[j]+1的(i,j),中间的数一定要改的,并且是等于b[i]或者b[j],我不会证,然后因为是随机数据,所 ...
- 【BZOJ1049】 [HAOI2006]数字序列
BZOJ1049 [HAOI2006]数字序列 dp好题? 第一问 第一问我会做!令\(b_i=a_i-i\),求一个最长不下降子序列. \(n-ans\)就是最终的答案. 第二问 好难啊.不会.挖坑 ...
- 洛谷 P2501 [HAOI2006]数字序列 解题报告
P2501 [HAOI2006]数字序列 题目描述 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变的幅度太大. ...
- 2021.12.06 P2501 [HAOI2006]数字序列(动态规划+LIS)
2021.12.06 P2501 [HAOI2006]数字序列(动态规划+LIS) https://www.luogu.com.cn/problem/P2501 题意: 现在我们有一个长度为 n 的整 ...
- 洛谷P2501 bzoj1049 [HAOI2006]数字序列
题目链接 bzoj 洛谷 题解 第一问: 假如 \(i < j\) 如果 \(j\)能从\(i\)转移过来 显然中间空隙必须足够 例如:\(50\) \(53\) \(53\) \(52\) 就 ...
- BZOJ1049 [HAOI2006]数字序列0
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
随机推荐
- Linux 命令 - history: 显示或操作历史列表
命令格式 history [-c] [-d offset] [n] history -anrw [filename] history -ps arg [arg...] 命令参数 -c 清除历史列表. ...
- Asp.net MVC 4 Html帮助类
Html帮助类 used to render (modify and output) HTML form elements 用来渲染HTML表单元素(修改和输出) Html.ActionLink 输出 ...
- 【Cocos2d入门教程一】Cocos2d-x环境搭建
在进行Cocos2d游戏开发前 我们先来配置一下环境,我们先来准备一下工具,我们所需要的工具分别为: 1.Cocos2d引擎 2.JDK 3.SDK 4.NDK 5.ANT 6.ADT 1.下载Coc ...
- hive 未初始化元数据库报错
启动hive-metastore和hive-server2 用beeline连接hive报错 [root@node04 hive]# beeline Beeline version 0.13.1-cd ...
- 返回页面,主页面不刷新window.history.go(-1),主页面刷新window.location.go(-1)
返回上一页,不刷新 window.history.go(-1) 返回上一页,刷新 window.location.go(-1)
- (转)如何把exe的flash还原成swf
首先要准备一个16进制字节码编辑器,这里用的是UltraEdit,可以到这里下载它最新的破解版.现在我们开始我们的还原工作吧.1.用UltraEdit打开待还原的exe文件.你就会看到这个exe的字节 ...
- The influence of informal governance mechanisms on knowledge integration
Title:The influence of informal governance mechanisms on knowledge integration within cross-function ...
- TIMAC 学习笔记(一)
TIMAC是TI公司推出的基于IEEE 802.15.4的通讯协议栈,编译环境为IAR,使用IAR自带的CLIB库,CLIB库提供了轻量级的C库,它不支持嵌入式C++.适用于RF4CE协议和ZigBe ...
- CLI-error
SQL_ERROR: One of the following occurred: RecNumber was negative or 0. BufferLength was less than ze ...
- 返璞归真vc++之感言
本人自述,大专学历,感觉自己也属于好学型学生,历任班上学习委员3年有余,参与学校项目几多个,不知道不觉从11年毕业已有3个年头,3年来,不敢苟同自己的生活方式,奈何人生无奈..从刚开始的电子商务公司转 ...