斜率优化回顾

(懒得排版了....^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;

斜率优化回顾,布布扣,bubuko.com

时间: 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