博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
普通sequence
阅读量:5236 次
发布时间:2019-06-14

本文共 2035 字,大约阅读时间需要 6 分钟。

首先是一个数据范围为2000的,这个可以用平方算法做。

要使它成为一个非降序列的合并次数最小,我们可以贪心地想到要使合并后的值尽量小,不然就会导致后面需要的合并次数增多。

我们用c[i]记录前缀和,f[i]表示以i结尾的这一段序列的最后一个元素的值,g[i]表示到i为止的合并次数,那么就可以得到一个转移方程。

f[i]=c[i]-c[j](f[j]<=c[i]-c[j])

g[i]=g[j]+i-j-1;

因为c[i]-c[j]在downto的过程中是单调递增的,所以只要找到一个可以转移的就可以break了。

View Code
program Neayo;const        inf='sequence.in';        ouf='sequence.out';var        i,j,k,m,n,ans:longint;        g,f,c:array[0..1502]of longint;procedure init;var x:longint;begin     assign(input,inf);assign(output,ouf);     reset(input);rewrite(output);     readln(n);     for i:=1 to n do     begin          read(x);          c[i]:=c[i-1]+x;     end;     close(input);end;procedure go;begin     fillchar(f,sizeof(f),127);     f[0]:=0;g[0]:=0;     for i:=1 to n do      for j:=i-1 downto 0 do      if c[i]-c[j]>=f[j] then      begin           f[i]:=c[i]-c[j];           g[i]:=g[j]+i-j-1;           break;      end;    writeln(g[i]);end;begin     init;     go;     close(output);end.

到了1000000的数据范围,平方算法是绝对不可行的了。

但是转移方程还是正确的,由于它的单调性,于是我们加入单调队列将决策过程优化成O(nlogn)。

View Code
1 const 2         inf='ccl.in'; 3         ouf='ccl.out'; 4 var 5         i,j,k,n:longint; 6         ans:longint; 7         c:array[0..1000001]of int64; 8         g,f,q:array[0..1000001]of int64; 9 procedure init;10 begin11      assign(input,inf);assign(output,ouf);12      reset(input);rewrite(output);13      readln(n);14      for i:=1 to n do15      begin16           read(c[i]);17           c[i]:=c[i-1]+c[i];18      end;19      close(input);20 end;21 procedure go;22 var l,r:longint;23 begin24      fillchar(f,sizeof(f),127);25      l:=1;r:=1;f[0]:=0;q[1]:=0;26      for i:=1 to n do27      begin28           while (l
=f[q[l+1]])do inc(l);29 f[i]:=c[i]-c[q[l]]+c[i];30 g[i]:=g[q[l]]+i-q[l]-1;31 while (r>l)and(f[i]<=f[q[r]])do dec(r);32 inc(r);33 q[r]:=i;34 end;35 writeln(g[n]);36 end;37 begin38 init;39 go;40 close(output);41 end.

转载于:https://www.cnblogs.com/neayo/archive/2012/11/06/2757179.html

你可能感兴趣的文章
js如何获取response header信息
查看>>
python_文件的打开和关闭
查看>>
mysql archive存储引擎导入数据报duplicate key
查看>>
ADO.NET介绍
查看>>
iOS: 数据持久化方案
查看>>
【C#】【Thread】Monitor和Lock
查看>>
UVALive - 3635 - Pie(二分)
查看>>
ext4.0 代理 的使用
查看>>
数据检查约束类型和语法
查看>>
AngularJS实战之路由ui-view
查看>>
使用jQuery+huandlebars防止编码注入攻击
查看>>
C#的托管与非托管大难点
查看>>
[转]HTTPS简谈
查看>>
(图片)jsp上传图片,进行缩放处理
查看>>
集合类List,set,Map 的遍历方法,用法和区别
查看>>
HDU-2577-How to Type
查看>>
java日志框架之logback——布局详细说明书地址
查看>>
Java Selenium (十二) 操作弹出窗口 & 智能等待页面加载完成 & 处理 Iframe 中的元素...
查看>>
Scala入门系列(十):函数式编程之集合操作
查看>>
pulseaudio的交叉编译
查看>>