算法优化》关于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][ ...
随机推荐
- Unity的Update() 和 FixedUpdate()的区别
Update() 和 FixedUpdate()在游戏中都会在更新的时候自动循环调用. 但是Update是在每次渲染新的一帧的时候才会调用,也就是说,这个函数的更新频率和设备的性能有关以及被渲染的物体 ...
- 前端之jQuery02
文档操作 重点:创建标签,jQuery里面没有这个方法 内部(子标签) 添加到指定元素内部后面 $(A).append(B): // B作为A的最后一个儿子元素:(把B追加到A) $(A).appen ...
- 如何快速上手.net下单元测试工具NUnit?
NUnit基本使用 准备知识: 读此博文需要了解单元测试基本概念及NUnit的的安装. 传送门:单元测试之道(使用NUnit) 1.常见的错误 当学习一个新东西时,先学习错误,是最快的方式. 1.1 ...
- linux学习 XShell上传、下载本地文件到linux服务器
(一)通过命令行的方式 1.linux服务器端设置 在linux主机上,安装上传下载工具包rz及sz; 如果不知道你要安装包的具体名称,可以使用yum provides */name 进行查找系统自带 ...
- HWOJ-字符串的逆序
将一个字符串str的内容颠倒过来,并输出.str的长度不超过100个字符. 如:输入“I am a student”,输出“tneduts a ma I”. 输入参数: inputString:输入的 ...
- phpwind主要表结构的研究随笔[1]
最近计划做一个新闻网站,前端打算用成熟的CMS搭建,后台是mongodb+mysql做数据过滤容器和最终数据存储,选型CMS如下: dedecms:国内某知名cms,以前用过,功能强大,网上资料资料很 ...
- fn project k8s 集成
具体部署还是比较简单的,以下为官方参考,只是有一个service type 为 loadBlancer 实际使用需要修改为NodePort Prerequisite 1: working Kuber ...
- unity drawcall测试
unity引擎影响drawcall的元素(使用Quad和Cube对比测试) 1.相机的background(没有渲染元素区域的颜色),4Verts.2Tris.1SetPass calls: ...
- vue的双向绑定原理解析(vue项目重构二)
现在的前端框架 如果没有个数据的双向/单向绑定,都不好意思说是一个新的框架,至于为什么需要这个功能,从jq或者原生js开始做项目的前端工作者,应该是深有体会. 以下也是个人对vue的双向绑定原理的一些 ...
- bzoj 1119 [POI2009]SLO && bzoj 1697 [Usaco2007 Feb]Cow Sorting牛排序——思路(置换)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1119 https://www.lydsy.com/JudgeOnline/problem.p ...