算法优化》关于1D*1D的DP的优化
关于这一主题的DP问题的优化方法,我以前写过一篇博客与其有关,是关于对递推形DP的前缀和优化,那么这种优化方法就不再赘述了。
什么叫1D*1D的DP捏,就是一共有N种状态,而每种状态都要N种决策,这就叫1D*1D的DP,对于这种DP一般来说状态的转移都是可以从O(N2)优化到O(NlogN)甚至O(N)的,那么,针对于不同的情况,也有不同的优化方法
经典模型一:
(b[x]随x非降)
对于DP方程形似与这一种的方程,明显的,这种DP的抉择方案数可以用单调队列直接解决化为O(1),所以对于这样的转移方程复杂度就可以化为O(N);
经典例题:POJ(2823)Sliding Window 给出友情链接刷题向》POJ2823 单调队列裸题(<不会做,请自裁>系列)
这道题无疑就是单调队列的最经典例题,那么用单调队列来解释也很容易。
接下来解释怎么用单调队列来维护这种题的最优最优决策数,
我们每次要做三个操作
1.将队首元素出队,直到队首元素属于b[x]~x-1
2.将队首元素作为最优解计算(由于单调队列的性质)
3.将g[x]加入队列,维护单调性
很容易得出复杂度为O(N)
经典模型二:
这种问题与决策单调性密切相关。那么什么是决策单调性捏?
当对于一个f(x),决策g(a')比g(a)优,并且a'>a,那么对于任意的x'>x,决策g(a')仍然比g(a)优。 即∀a<=a',g(a)<=g(a');
显然的,并不是所有的方程都满足这一性质,首先我们先判断哪些DP方程有这一性质。
设s(x,i)为当判断到第x个,决策是第i个数时的函数值,s(x,i)=f(i)+w[i,x];
那么也就是说:现在已知s(x,i')>=s(x,i) i'<i(式1),试求满足s(x',i')>=s(x',i)(x<x')(式2)的条件;
我们先把式子打开,可以得到f(i')+w[i',x]>=f(i)+w[i,x](i'<i),我们再把式子左边加上w[i',x']-w[i',x],右边加上w[i,x']-w[i,x],就可以得到式2;
那么显然,要这个不等式成立的条件就是w[i',x']-w[i',x]>=w[i,x']-w[i,x];
将其整理得w[i',x']+w[i,x]>=w[i',x]+w[i,x'](i'>i,x'>x);
归纳得出w[i+1,x+1]+w[i,x]>=w[i+1,x]+w[i,x+1](四边形不等式);
也就是说,只有在当前区间函数式满足以上结论时,我们的DP才可以使用抉择单调性优化。一般可以根据题目定义(或打表)判断;
经典例题:BZOJ1010玩具装箱(然而直到本篇博客发表时BZOJ还在维护)
经典模型三:
此问题因为在循环中的F是定值,所以可以转化为更加通用的方程:
得到这个式子之后,我们对这个式子进行一个处理,得到y(i)=-a(n)/b(n)*x(i)+f[n]/b(n);
对于这个式子,我们当前处理的就是用两个数组下标得出来的一元二次方程,那么对于每一个当前要决策的点x,a[x]和b[x]都是固定的,那么对于以上的一元二次方程,斜率都是一定的,那么也就是说,我们只要找到以前的,能使f[n]最大的点就好了。
那么我们可以把以前加入的点的x[n]和y[n]值作为平面上的点,既然有斜率,那么找截距就变成一个十分简单的事情了,只要找到能使截距最大的点就好。
然后我们会发现,我们能求到的最优解一定在这些点形成的上或下凸壳上,然后我们的问题就变成了维护凸壳。
这里有两种情况,
一种情况是这些直线的斜率和在横坐标上的点都是递增的,
在这种情况下,我们维护凸壳可以用单调队列处理,然后移动最优点的位置也是O(1)的,所以最好复杂度就是O(N)的
经典例题:BZOJ1597(土地购买)
还有一种情况,当斜率和横坐标没有任何限制,那么我们就不得不用平衡树叠二分来维护凸壳,这样复杂度就是O(NlogN)的。
经典例题:NOI2007国币兑换
关于这种题目暂时就说这么多,到以后或许会更新代码
算法优化》关于1D*1D的DP的优化的更多相关文章
- 1D/1D优化dp之利用决策点的凸性优化
关于dp的优化之前做过一些简单的利用优先队列或者单调队列维护一个值就ok了,但有时候给出的方程很难直接用单调队列维护,需要转化一下思路. 这种优化方式利用数形结合,根据比较斜率来抛去一些非最优解,能将 ...
- DP的优化总结
一.预备知识 \(tD/eD\) 问题:状态 t 维,决策 e 维.时间复杂度\(O(n^{e+t})\). 四边形不等式: 称代价函数 w 满足凸四边形不等式,当:\(w(a,c)+w(b,d)\l ...
- 【Codeforces 321E / BZOJ 5311】【DP凸优化】【单调队列】贞鱼
目录 题意: 输入格式 输出格式 思路: DP凸优化的部分 单调队列转移的部分 坑点 代码 题意: 有n条超级大佬贞鱼站成一行,现在你需要使用恰好k辆车把它们全都运走.要求每辆车上的贞鱼在序列中都是连 ...
- HDU3480_区间DP平行四边形优化
HDU3480_区间DP平行四边形优化 做到现在能一眼看出来是区间DP的问题了 也能够知道dp[i][j]表示前 i 个节点被分为 j 个区间所取得的最优值的情况 cost[i][j]表示从i ...
- 动态规划DP的优化
写一写要讲什么免得忘记了.DP的优化. 大概围绕着"是什么","有什么用","怎么用"三个方面讲. 主要是<算法竞赛入门经典>里 ...
- 【BZOJ】1096: [ZJOI2007]仓库建设(dp+斜率优化)
http://www.lydsy.com/JudgeOnline/problem.php?id=1096 首先得到dp方程(我竟然自己都每推出了QAQ)$$d[i]=min\{d[j]+cost(j+ ...
- 动态规划算法(Dynamic Programming,简称 DP)
动态规划算法(Dynamic Programming,简称 DP) 浅谈动态规划 动态规划算法(Dynamic Programming,简称 DP)似乎是一种很高深莫测的算法,你会在一些面试或算法书籍 ...
- dp斜率优化
算法-dp斜率优化 前置知识: 凸包 斜率优化很玄学,凭空讲怎么也讲不好,所以放例题. [APIO2014]序列分割 [APIO2014]序列分割 给你一个长度为 \(n\) 的序列 \(a_1,a_ ...
- 【BZOJ-4518】征途 DP + 斜率优化
4518: [Sdoi2016]征途 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 230 Solved: 156[Submit][Status][ ...
随机推荐
- vue动态 设置类名
<div class="tab"> <navigator :class="currentTab=='mzfw'?'nav active': 'nav'& ...
- win10 svn server安装过程中到starting service时失败
当安装到Start Service阶段后,将会出错并会弹出一个对话框,提示是否要retry. (此时SVN服务软件已经安装完毕,仅仅是无法通过证书验证,无法启动服务),如果此时选择对话框中的cance ...
- CSS3的圆角border-radius属性
一,语法解释 border-radius : none | <length>{1,4} [/ <length>{1,4} ] <length>: 由浮点数字和单位标 ...
- gulp 流处理
包含的内容: 穿插流 流合并 流队列 流筛选 1. 穿插流 // passthrough stream 把流传递给其他的 // use gulp.src(glob,{p ...
- Android Studio 打包及引用 AAR(可能是史上最详细的 )
https://www.jianshu.com/p/1777a634db5e Android Library(AAR) 的好处 Android 库在结构上与 Android 应用模块相同.它可以提供构 ...
- 阿里云服务器tomcat启动慢解决方案
yum -y install rng-tools( 熵服务) cp /usr/lib/systemd/system/rngd.service /etc/systemd/system v ...
- Nginx 教程示例
https://www.cnblogs.com/jingmoxukong/p/5945200.html
- java随机数组
import java.util.Random; public class Ccore { public static void main(String[] args) { for(int i=1;i ...
- 杂项-公司-百科:华特·迪士尼-un
ylbtech-杂项-公司-百科:华特·迪士尼 华特·迪士尼(Walt Disney,全名Walter Elias Disney,又译沃尔特·迪士尼,1901年12月5日—1966年12月15日),出 ...
- kali下apche配置多网站
设置文件地址为 :/etc/apache2/sites-available/default 添加: <VirtualHost *:80> ServerName www.php. ...