[jzoj]3432. 【GDOI2014模拟】服务器(斜率优化或单调队列)
来源:互联网 发布:锯棕榈 知乎 编辑:程序博客网 时间:2024/06/13 03:15
https://jzoj.net/senior/#main/show/3432
Problem
给定一个长度为N的序列A,对于第i个位置,可以直接花费Ai的费用,或者间接花费j-i(j是第j个位置,必须是直接花费的),要求在这样的条件下,序列A的每一个数都得直接花费或间接花费,求最小费用.
Data constraint
60%的数据中,1 <= n <= 1 000
100%的数据中,1 <= n <= 1 000 000
80%的数据中, 1 <= ci <= 50
100%的数据中,1 <= ci <= 1 000 000 000
Solution
60%
对于60%的数据,我们很容易想到设二维的dp,即设
要更新
要更新
90%
研究60%的方法,我们发现可以滚动.
然后发现对于枚举的一个
首先我们把二维变成一维后,显然我们需要先更新
于是我们可以加一个小小的决策优化,即如果上一次是由
100%
正确的做法有两种:
①斜率优化
考虑一个决策点
决策点
保证对于
那么每次的
注意还要判断
由于第一次打斜率优化,贴一下代码吧:
var a,d,f:array[0..1000000] of int64; //注意不要用qword,不资兹负数 n,j:int64; i:longint;function min(x,y:int64):int64; begin if x<y then exit(x) ; exit(y); end;function g(x,y:int64):real; begin exit(((f[x]-f[y]+(sqr(x)-sqr(y)-x+y)/2))/(x-y)) end;begin readln(n); for i:=1 to n do read(a[i]); d[0]:=1; d[1]:=n; j:=1; f[n]:=a[n]; for i:=n-1 downto 0 do begin while (j<d[0]) and (g(d[j],d[j+1])>=i) do inc(j); //更新队首 f[i]:=f[d[j]]+a[i]+(d[j]-i)*(d[j]-i-1) div 2; while (j<d[0]) and (g(d[d[0]-1],d[d[0]])<=g(d[d[0]],i)) do dec(d[0]); //更新队尾 inc(d[0]); d[d[0]]:=i; //加入队列里 end; write(f[0]);end.
②优先队列
——膜拜膜拜詹总的做法;
- [jzoj]3432. 【GDOI2014模拟】服务器(斜率优化或单调队列)
- 【GDOI2014模拟】服务器 (斜率单调队列优化Dp)
- JZOJ 3432. 【GDOI2014模拟】服务器
- jzoj. 3432. 【GDOI2014模拟】服务器
- ##单调队列、斜率优化##
- JZOJ.3432【GDOI2014模拟】服务器 解题报告
- 3432. 【GDOI2014模拟】服务器
- 生产汽车(单调队列+斜率优化)
- 斜率优化+单调队列优化DP
- 斜率优化+单调队列优化DP<转>
- UVALive - 4726 Average (斜率优化+单调队列)
- 单调队列+斜率优化的DP
- 【专辑】单调队列+斜率优化的DP
- 【专题】单调队列/斜率优化DP
- UVALive 4726Average 单调队列+斜率优化
- 单调队列,斜率优化dp 专题
- 【整理】斜率or单调队列优化dp
- 【LA4726】Average【斜率优化】【单调队列】
- MySQL常用命令
- Windows系统的MBR磁盘分区--MBR的结构和作用(一)
- cocos2dx 消灭星星
- Java EE之Servlet技术
- Bootstrap 环境安装
- [jzoj]3432. 【GDOI2014模拟】服务器(斜率优化或单调队列)
- lucene常见的问题
- java中的if结构
- 7月11日学习笔记
- 机器学习----xgboost学习笔记
- Java里JWT的使用方法
- mysql远程登录的那些事
- hdu5514(有技巧的容斥)
- 制造业ai帮助制造企业实现人工智能转型