(懒得排版了....^w^)
今天刷了一天Dp的题,做恶心了,刚刚做到一个既能斜率优化,又能四边形不等式优化的题 : hdu 3480 Division
斜率优化....好吧,我忘了怎么写了........
YY.....
.....
.....
.....
bingo....
在单调队列进行的斜率优化时,用单调队列维护解“优”的单调性,即,越优的越在前面。。。
简要总结一下(以f[i] = min{ f[j] + (a[i] - a[j])^2 } i < j ,a[i]单调递增 为例 ):
一、对于决策i,找较优
f[j1] - (a[i] - a[j1])^2 <= f[j2] - (a[i] - a[j2])^2
整理:
设F[i] = f[i] + a[i]^2
F[j1] - F[j2] <= 2a[i] (a[j1] - a[j2])
代码:
while(front + 1 < rear)
if(F[q[front + 1]] - F[q[front]] <= 2a[i] (a[q[front + 1]] - a[q[front]]))
front ++; // q[front] 不如 q[front + 1]优
else break; // 找到当前最优
二、取出
int k = q[front];
dp[i] = dp[k] + (a[i] - a[k]) ^ 2;
三、把 i 放入队列,维护凸性质(维护斜率的单调性)
设 q1 = q[rear - 1],q2 = q[rear - 2]
while(front + 1 < rear)
if( (F[i] - F[q1]) * (a[q2] - a[q1]) <= (F[q2] - F[q1]) * (a[i] - a[q1]) ) // 因为q2 < q1 < i & a[i]单调递增
rear --; // q1不如 i 优
else break; // q1比i优
q[rear ++] = i;
斜率优化回顾
时间: 2024-10-08 12:34:37
斜率优化回顾的相关文章
斜率优化dp小结
单调队列优化 在写斜率优化之前,我们来回顾一下单调队列优化的dp 1. 对于如下形式的dp方程 dp[i]=min{dp[j]+f(j)}(0<j<i) 我们直接用一个变量维护(0, i)中dp[j] + f(j)的最小值即可 2.对于如下形式的dp方程 dp[i]=min{dp[j]+f(j)}(i?m<j<i) 我们可以用一个单调队列维护一个(i - m, j)中dp[j] + f(j)的最小值,然后做到O(1)转移. 斜率优化 基本形式 但是对于形如 dp[i]=min{dp
【BZOJ3963】[WF2011]MachineWorks cdq分治+斜率优化
[BZOJ3963][WF2011]MachineWorks Description 你是任意性复杂机器公司(Arbitrarily Complex Machines, ACM)的经理,公司使用更加先进的机械设备生产先进的机器.原来的那一台生产机器已经坏了,所以你要去为公司买一台新的生产机器.你的任务是在转型期内尽可能得到更大的收益.在这段时间内,你要买卖机器,并且当机器被ACM公司拥有的时候,操控这些机器以获取利润.因为空间的限制,ACM公司在任何时候都只能最多拥有一台机器. 在转型期内,有若
hdu3507 Print Article[斜率优化dp入门题]
Print Article Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 11761 Accepted Submission(s): 3586 Problem Description Zero has an old printer that doesn't work well sometimes. As it is antiqu
_bzoj1096 [ZJOI2007]仓库建设【斜率优化dp】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1096 又是一道经典斜率优化. #include <cstdio> const int maxn = 1000005; int n, c[maxn], head, tail, x[maxn]; long long sp[maxn], sxp[maxn], f[maxn]; char ch; struct point { long long x, y; int id; } que[maxn]
BZOJ - 1010【斜率优化DP】
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9961 Solved: 4056[Submit][Status][Discuss] Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压 缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具,第i件玩具经过 压缩后变成一维长度为Ci.为了方便整理
斜率优化DP学习
转自:http://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html 我们知道,有些DP方程可以转化成DP[i]=f[j]+x[i]的形式,其中f[j]中保存了只与j相关的量.这样的DP方程我们可以用单调队列进行优化,从而使得O(n^2)的复杂度降到O(n). 可是并不是所有的方程都可以转化成上面的形式,举个例子:dp[i]=dp[j]+(x[i]-x[j])*(x[i]-x[j]).如果把右边的乘法化开的话,会得到x[i]*x[j
bzoj 1010 玩具装箱toy -斜率优化
P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具,第i件玩具经过压缩后变成一维长度为Ci.为了方便整理,P教授要求在一个一维容器中的玩具编号是连续的.同时如果一个一维容器中有多个玩具,那么两件玩具之间要加入一个单位长度的填充物,形式地说如果将第i件玩具到第j个玩具放到一个容器中,那么容器的长度将为 x=j-i+Sigma(Ck) i<=K<=j 制作容器的
BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9812 Solved: 3978[Submit][Status][Discuss] Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具,第i件玩具经过压缩后变成一维长度为Ci.为了方便整理,P
bzoj-4518 4518: [Sdoi2016]征途(斜率优化dp)
题目链接: 4518: [Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须在休息站过夜.所以,一段路必须在同一天中走完. Pine希望每一天走的路长度尽可能相近,所以他希望每一天走的路的长度的方差尽可能小. 帮助Pine求出最小方差是多少. 设方差是v,可以证明,v×m^2是一个整数.为了避免精度误差,输出结果时输出v×m^2. In