博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3017 cut the sequence
阅读量:5342 次
发布时间:2019-06-15

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

分析:不好理解,大体上知道了优化的方向,但是需要单调队列和平衡树(或堆)来维护。

比较难以理解。

f[i]=min{f[k]+max{a[k+1],.....,a[i]}}.

n2的枚举没有问题,优化势在必行。

我们另A[I,J]表示i到j的最大值,那么如果A[i+1,j]=A[i+2,j],那么f[i]+A[i+1,j]<f[i+1]+A[i+2,j],

所以很显然f[i]=min{f[k]+A[k+1,i]}有用的K值都是满足某段区间的最大值。

如果用单调队列维护a[i]使队列中的元素a值单调递减,那么显然可以用于更新的就是a[q[i]]+f[q[i-1]],但是与其他题目不同的是队首元素并不是最优的,所以可以用堆或者平衡树来迅速找到最大值。

核心代码:

procedure ins(c,d:longint);begin  sum:=sum+c;  while sum>m do    begin      inc(last);      sum:=sum-a[last];    end;  while (v[tail]<=c) and(tail>head) do    begin      delete(z[tail]);      dec(tail);    end;  inc(tail);  v[tail]:=c;  p[tail]:=d;end;procedure solve;var  i: longint;begin  for i:= 1 to n do    begin      ins(a[i],i);      while p[head+1]

  

转载于:https://www.cnblogs.com/reflec94/archive/2011/10/20/2218433.html

你可能感兴趣的文章
较快的maven的settings.xml文件
查看>>
随手练——HDU 5015 矩阵快速幂
查看>>
malloc() & free()
查看>>
Linux 的 date 日期的使用
查看>>
Java变量类型,实例变量 与局部变量 静态变量
查看>>
mysql操作命令梳理(4)-中文乱码问题
查看>>
Python环境搭建(安装、验证与卸载)
查看>>
一个.NET通用JSON解析/构建类的实现(c#)
查看>>
详谈js面向对象 javascript oop,持续更新
查看>>
关于这次软件以及pda终端的培训
查看>>
jQuery上传插件Uploadify 3.2在.NET下的详细例子
查看>>
如何辨别一个程序员的水平高低?是靠发量吗?
查看>>
新手村之循环!循环!循环!
查看>>
线程安全问题
查看>>
linux的子进程调用exec( )系列函数
查看>>
MySQLdb & pymsql
查看>>
zju 2744 回文字符 hdu 1544
查看>>
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
前端笔记-bom
查看>>
MATLAB作图方法与技巧(一)
查看>>