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第三(前两名是怎么回事......)

最新文章

  1. 【ASH】如何导出视图DBA_HIST_ACTIVE_SESS_HISTORY的查询结果数据
  2. VB.NET vs. C#
  3. 重写TiledServiceLayer实现Arcgis访问Mapabc地图服务 (转载)
  4. ios 获取通讯录的所有信息
  5. intellij 设置-试验过的
  6. easyui 文本框 显示提示信息data-options=&quot;prompt:&#39;格式:水箱支架-京东汽配店铺-图集(大图/图集6)&#39;&quot;
  7. hibernate添加数据,默认字段为null的问题解决
  8. TreeMap简单simple
  9. navigator,JS检测浏览器插件
  10. weak引用变量是否线程安全
  11. cc2530 -----SampleApp.c解析
  12. 转:Apache 与 Nginx 比较
  13. Python Learning: 03
  14. 生活英语读写MOOC-Literature Tutor-有声名著阅读推荐
  15. 成环的概率dp(初级) zoj 3329
  16. iOS----------对单元格取余
  17. 深入理解C#的装箱和拆箱(转)
  18. CSS选择器命名及常用命名
  19. 条件随机场之CRF++源码详解-预测
  20. php之变量和常量

热门文章

  1. SAX - Hello World
  2. HTML JSOgN to string
  3. CSS之Win8界面摸拟
  4. ASP.NET中页面加载时文本框(texbox控件)内有文字获得焦点时文字消失
  5. Contoso 大学 - 使用 EF Code First 创建 MVC 应用
  6. 免费主机kilu使用
  7. PHP学习笔记 - 入门篇(5)
  8. 当html中存在url中如: onclick=&quot;toView(&#39;参数1&#39;)&quot;, 参数1是特别字符,如&amp;asop;&amp;quot;&#39; &quot;等时,浏览器解析时会报错。解决方法如文中描述
  9. css3学习笔记之文本效果
  10. 使用httpclient发送post请求与get请求