1D/1D1D/1D1D/1D动态规划

形如dp[i]=min{dp[j]+w(j,i)}(Li≤j≤Ri)dp[i]=min\{dp[j]+w(j,i)\} (L_i\leq j\leq R_i)dp[i]=min{dp[j]+w(j,i)}(Li​≤j≤Ri​) 的dpdpdp方程被称作1D/1D1D/1D1D/1D动态规划,其中LiL_iLi​和RiR_iRi​单调递增,w(j,i)w(j,i)w(j,i)决定着优化策略选择。

(dp[i]=max{dp[j]+w(j,i)}dp[i]=max\{dp[j]+w(j,i)\}dp[i]=max{dp[j]+w(j,i)}与dp[i]=min{dp[j]+w(j,i)}dp[i]=min\{dp[j]+w(j,i)\}dp[i]=min{dp[j]+w(j,i)}类似,本文不赘述)

决策单调性优化DP

决策单调性

设j0[i]j_0[i]j0​[i]表示dp[i]dp[i]dp[i]转移的最优决策点,那么决策单调性可描述为 ∀i≤j,j0[i]≤j0[j]\forall i\leq j,j_0[i]\leq j_0[j]∀i≤j,j0​[i]≤j0​[j]。也就是说随着iii的增大,所找到的最优决策点是递增态(非严格递增)。

四边形不等式

表述1:
w(x,y)w(x,y)w(x,y)为定义在整数集合上的一个二元函数,若 ∀a≤b≤c≤d,w(a,c)+w(b,d)≤w(a,d)+w(b,c)\forall a\leq b\leq c\leq d,w(a,c)+w(b,d)\leq w(a,d)+w(b,c)∀a≤b≤c≤d,w(a,c)+w(b,d)≤w(a,d)+w(b,c),那么函数www满足四边形不等式

表述2:
w(x,y)w(x,y)w(x,y)为定义在整数集合上的一个二元函数,若 ∀a<b,w(a,b)+w(a+1,b+1)≤w(a+1,b)+w(a,b+1)\forall a<b,w(a,b)+w(a+1,b+1)\leq w(a+1,b)+w(a,b+1)∀a<b,w(a,b)+w(a+1,b+1)≤w(a+1,b)+w(a,b+1),那么函数www满足四边形不等式

定理:

1D/1D1D/1D1D/1D动态规划具有决策单调性当且仅当函数www满足四边形不等式 时成立。

实现

单调队列优化DP

形如dp[i]=min{dp[j]+A(i)+B(j)}dp[i]=min\{dp[j]+A(i)+B(j)\}dp[i]=min{dp[j]+A(i)+B(j)}的dpdpdp方程均可尝试使用单调队列优化。

实现

斜率优化DP

形如dp[i]=min{A(i)×B(j)+C(i)+D(j)}dp[i]=min\{A(i)\times B(j)+C(i)+D(j)\}dp[i]=min{A(i)×B(j)+C(i)+D(j)}的dpdpdp方程可尝试使用斜率优化。

1.0 B(j)B(j)B(j)严格单调递增

法一:线性规划

考虑把 dp[i]=A(i)×B(j)+C(i)+D(j)dp[i]=A(i)\times B(j)+C(i)+D(j)dp[i]=A(i)×B(j)+C(i)+D(j) 化成y=kx+by=kx+by=kx+b的形式,其中y,xy,xy,x只与jjj有关,k,bk,bk,b只与iii有关,且 xxx严格单调递增

则有:
D(j)=−A(i)×B(j)+dp[i]−C(i)D(j)=-A(i)\times B(j)+dp[i]-C(i)D(j)=−A(i)×B(j)+dp[i]−C(i)
其中y=D(j),k=−A(i),x=B(j),b=dp[i]−C(i)y=D(j),k=-A(i),x=B(j),b=dp[i]-C(i)y=D(j),k=−A(i),x=B(j),b=dp[i]−C(i)

在平面直角坐标系上把所有的(xj,yj)(x_j,y_j)(xj​,yj​)(即(B(j),D(j))(B(j),D(j))(B(j),D(j)))标出来。
要令dp[i]dp[i]dp[i]最小,则要令bbb最小,即是要找到某一点(xj,yj)(x_j,y_j)(xj​,yj​),使斜率为kkk的直线经过该点时算出来的bbb最小。
发现只有 在给出点的下凸壳上的点可能成为最优决策点。

法二:代数法+数形结合

设j1,j2j_1,j_2j1​,j2​ (0≤j1<j2<i)(0\leq j_1<j_2<i)(0≤j1​<j2​<i) 为dp[i]dp[i]dp[i]的两个决策点,且决策点j2j_2j2​优于j1j_1j1​,则有:
A(i)×B(j2)+C(i)+D(j2)≤A(i)×B(j1)+C(i)+D(j1)A(i)\times B(j_2)+C(i)+D(j_2)\leq A(i)\times B(j_1)+C(i)+D(j_1)A(i)×B(j2​)+C(i)+D(j2​)≤A(i)×B(j1​)+C(i)+D(j1​)

化简式子,使不等号左边只与iii有关,不等号右边只与j1,j2j_1,j_2j1​,j2​有关:
A(i)≤−D(j2)−D(j1)B(j2)−B(j1)A(i)\leq -\frac{D(j_2)-D(j_1)}{B(j_2)-B(j_1)}A(i)≤−B(j2​)−B(j1​)D(j2​)−D(j1​)​
−A(i)≥D(j2)−D(j1)B(j2)−B(j1)-A(i)\geq \frac{D(j_2)-D(j_1)}{B(j_2)-B(j_1)}−A(i)≥B(j2​)−B(j1​)D(j2​)−D(j1​)​
设xj=B(j),yj=D(j)x_j=B(j),y_j=D(j)xj​=B(j),yj​=D(j),则D(j2)−D(j1)B(j2)−B(j1)\frac{D(j_2)-D(j_1)}{B(j_2)-B(j_1)}B(j2​)−B(j1​)D(j2​)−D(j1​)​可以看作Pj1(xj1,yj1)P_{j_1}(x_{j_1},y_{j_1})Pj1​​(xj1​​,yj1​​),Pj2(xj2,yj2)P_{j_2}(x_{j_2},y_{j_2})Pj2​​(xj2​​,yj2​​)两点连线的斜率。

也就是说,如果存在两个决策点j1,j2j_1,j_2j1​,j2​满足0≤j1<j2<i0\leq j_1<j_2<i0≤j1​<j2​<i,使得Pj1P_{j_1}Pj1​​,Pj2P_{j_2}Pj2​​两点连线的斜率≤−A(i)\leq -A(i)≤−A(i),那么决策点j2j_2j2​优于j1j_1j1​。


于是,对于这样子的三个点,可证BBB一定不是最优决策点

我们可以将BBB从候选决策点中踢出去(删除),只留下AAA和CCC,删后的情况如下图所示:

最终,我们维护的候选决策点应该构成了一个下凸壳:

实现

进一步优化

若k0(i)=−A(i),B(j)k_0(i)=-A(i),B(j)k0​(i)=−A(i),B(j)均单调不减,则该dpdpdp方程必定有决策单调性。那么就不需要在凸壳上二分找最优决策点了。

1D/1D动态规划的三种优化方法相关推荐

  1. html z-dext优先级顺序,$ext{1D/1D}$ 动态规划的三种优化

    神必博主的沙雕前言 参考文献: 概念明晰 所谓 (ext{1D/1D}) 动态规划, 指的是状态数和单状态决策数都是 (O(n)) 的动态规划方程, 暴力求解的时间复杂度为 (O(n^2)). 四边形 ...

  2. 排序--Bubble的三种优化

    BubbleSort      冒泡排序是许多人接触的第一种排序方式,由于这种方式比较简单,所以大部分人也没有深入研究,所以写出的代码是这样的: void BubbleSort(int *arr, i ...

  3. 支持向量机 (三): 优化方法与支持向量回归

    拉格朗日乘子法 - KKT条件 - 对偶问题 支持向量机 (一): 线性可分类 svm 支持向量机 (二): 软间隔 svm 与 核函数 支持向量机 (三): 优化方法与支持向量回归 优化方法 一.S ...

  4. win 7计算机图标变了,win7系统图标变黑的三种解决方法(图文)

    一些Win7旗舰版系统用户说桌面图标变黑了,也不知道怎么回事?严重影响桌面美观,这是由于下载一些有Bug的软件的缘故或者中了木马会导致图标缓存出错,具体表现为图标变黑的现象.那么有什么办法解决win7 ...

  5. 3维IC的三种实现方法【读论文】

    [论文题目]Block-level 3D IC Design with through-silicon-via planning [简介]该论文首先介绍了目前三维IC设计的三种方法,并基于第二种--块 ...

  6. 数学建模matlab 优化模型,数学建模实验中三种优化模型的分析

    1. 引言 在20世纪中期,数学建模 [1] 就在欧美国度首次被发现,而在中国的呈现稍晚些,但是大约在80年代初始咱们国家也就有了.它的核心即是创立数学模型 [2] ,使得问题获得最优化的解决.而数学 ...

  7. Topk问题的三种求解方法

    Topk问题的三种求解方法 什么是Topk问题 方法一:堆排序法 方法二:把N个数建堆,取出前k个 方法三:建一个k个数的堆 什么是Topk问题 其实顾名思义,这个问题也就是在N个数中找出前k个最值. ...

  8. C/C++冒泡排序4种优化方法

    冒泡排序应该是大多数人接触的第一种排序方法,虽然它的时间复杂度为O(n^2),但是它简单易懂,代码复杂度低,所以仍有很大的用武之地.最近在总结排序算法,决定重温下冒泡排序,以及它的优化方法. 冒泡排序 ...

  9. C语言快速排序算法及三种优化方式

    C语言快速排序算法及三种优化方式 C语言快速排序算法及三种优化方式 原理 快速排序复杂度分析 1 时间复杂度 2 空间复杂度 快速排序代码实现 1 普通快速排序 2 快速排序优化1-三数取中优化不必要 ...

最新文章

  1. Xamarin.FormsShell基础教程(8)Shell的模版构成
  2. osgi框架 android,基于OSGi的Android应用模块动态加载框架设计与实现
  3. Atitit nlp重要节点 v3 目录 1. 语法分析重点 节点余额365个 1 2. nlp词性表 2 2.1. 词语分类13类 2 2.2. 副词 约20个 3 2.3. 代词30个 3 2
  4. 如何将两个pdf合成一个?
  5. 微信公众号迁移公证办理流程
  6. 聚类分析--k中心点算法
  7. 文明IV模组(MOD)制作指南
  8. 部署外网网站(二)——宝塔搭建服务器
  9. python读取千万级数据库数据类型_Python 基于Python从mysql表读取千万数据实践
  10. 崩坏三 夏日竞猜 7.21 第一场
  11. 移动硬盘在mac上无法显示 读不出来
  12. python发微信红包_微信现金红包 python
  13. 微信中无法直接下载秒借类金融贷款APP的解决方案
  14. 商务邮箱一般用什么?办公最常用的邮箱功能是?
  15. 【大学生数学竞赛】公式大全(补充中)
  16. Eclipse每次打包注意事项
  17. PHP日期转换为时间戳
  18. 30行Python代码,打造一个微信群聊助手~
  19. 买牛奶(南阳oj892)
  20. 千亿5G投资,谁会是新的赢家?

热门文章

  1. linux 全双工 wifi热点,Linux中的同时套接字读/写(“全双工”)(特别是aio)
  2. ios realm 文件_iOS开发中使用Realm数据库
  3. 69. Sqrt(x)010(二分法求解+详解注释)
  4. [EDA] 给出一个双进程状态机,请把它改为单进程状态机。
  5. 算法导论水壶问题(第三版第八章思考题8-4)
  6. Division CodeForces - 1445C(数论因子相关)
  7. 通过Java编写一个服务器理解动态Web,静态Web
  8. OpenCV 数据初始化空间分配
  9. P2303 [SDOI2012] Longge(数论/欧拉函数)
  10. P2487 [SDOI2011]拦截导弹(cdq分治/计数问题思想)