dp优化---四边形不等式与决策单调性
四边形不等式
定理1:
设w(x,y)为定义在整数集合上的二元函数,若存在任意整数a,b,c,d(a<=b<=c<=d),并且w(a,d)+w(b,c)>=w(a,c)+w(b,d)都成立,则w(x,y)满足四边形不等式。
定理2:
设w(x,y)为定义在整数集合上的二元函数,若存在任意整数a,b(a<b),并且w(a,b+1)+w(a+1,b)>=w(a,b)+w(a+1,b+1)都成立,则w(x,y)也满足四边形不等式。
用数学归纳法证明即可。
决策单调性
假设转移方程为dp[i]=min(dp[j]+v(j,i)),v(j,i)为状态j到状态i的转移代价。设p[i]为转移到i状态最优的j,如果p[i]在定义域上单调不下降则称转移方程具有决策单调性。
定理:
若在上述转移方程中v(j,i)满足四边形不等式,则转移方程满足决策单调性。
证明:
观察式③可以发现,当j<p[i]时,以p[i]作为dp[i`]的决策比j要好,那么以此可以得出p[i`]>=p[i],既转移方程满足决策单调性。
应用
如何通过决策单调性将o(n^2)的复杂度降到o(nlogn)呢?
关键在于如何维护p数组,首先再回顾一下p数组的意义:p[i]是dp[i]的最优决策,既dp[i]=dp[p[i]]+v(p[i],i)最优。并且p数组单调不下降,根据单调不下降的性质可以维护一个单调队列,队列元素为(x,l,r)三元组表示p[l-r]=x。每次添加一个新决策i都要与之前的决策比较,删除p[1~i-1]的决策,维护它最优决策的性质。
总结一下过程,对于每个i,执行下列操作:
1.设队首为(j0,l0,r0),若r0<i,则删除队首,保证队首的决策对应dp[i]。然后再令l0++(举例:当队首为(1,2,5),而i==2时,删除p[2],因为对i+1来说p[1~i]没有意义)。
2.计算dp[i]=dp[j0]+v(j0,i)
3.插入新决策i(具体过程见板子)。
q[].x=;q[].l=;q[].r=n;t=h=;
for(int i=;i<=n;i++){
while(h<=t&&q[h].r<i) h++;//h表示队首,删除队首
q[h].l++;
dp[i]=dp[q[h].x]+val(i,q[h].x);
int pos=1e9;
while(h<=t&&dp[i]+val(q[t].l,i)<=dp[q[t].x]+val(q[t].l,q[t].x))
pos=q[t].l,t--;//当队尾决策都不如决策i好时,删去队尾
if(h<=t&&dp[q[t].x]+val(q[t].r,q[t].x)>dp[i]+val(q[t].r,i)){
int l=q[t].l,r=q[t].r,mid,p1=q[t].r+;
while(l<=r){//二分求出以i为最优决策的位置p1,p1之后i决策更优
mid=l+r>>;
if(dp[q[t].x]+val(mid,q[t].x)>=dp[i]+val(mid,i))
p1=mid,r=mid-;
else
l=mid+;
}
q[t].r=p1-;pos=p1;
}
if(pos<=n){
++t;q[t].l=pos;q[t].r=n;q[t].x=i;
}
}
板子
dp优化---四边形不等式与决策单调性的更多相关文章
- 省选算法学习-dp优化-四边形不等式
嗯......四边形不等式的确长得像个四边形[雾] 我们在dp中,经常见到这样一类状态以及转移方程: 设$dp\left[i\right]\left[j\right]$表示闭区间$\left[i,j\ ...
- dp优化-四边形不等式(模板题:合并石子)
学习博客:https://blog.csdn.net/noiau/article/details/72514812 看了好久,这里整理一下证明 方程形式:dp(i,j)=min(dp(i,k)+dp( ...
- 【转】斜率优化DP和四边形不等式优化DP整理
(自己的理解:首先考虑单调队列,不行时考虑斜率,再不行就考虑不等式什么的东西) 当dp的状态转移方程dp[i]的状态i需要从前面(0~i-1)个状态找出最优子决策做转移时 我们常常需要双重循环 (一重 ...
- 区间dp之四边形不等式优化详解及证明
看了那么久的四边形不等式优化的原理,今天终于要写一篇关于它的证明了. 在平时的做题中,我们会遇到这样的区间dp问题 它的状态转移方程形式一般为dp[i][j]=min(dp[i][k]+dp[k+1] ...
- HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化
HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化 n个节点n-1条线性边,炸掉M条边也就是分为m+1个区间 问你各个区间的总策略值最少的炸法 就题目本身而言,中规中矩的 ...
- 『一维线性dp的四边形不等式优化』
四边形不等式 定义:设\(w(x,y)\)是定义在整数集合上的的二元函数,若对于定义域上的任意整数\(a,b,c,d\),在满足\(a\leq b\leq c \leq d\)时,都有\(w(a,d) ...
- 区间DP的四边形不等式优化
今天上课讲DP,所以我学习了四边形不等式优化(逃 首先我先写出满足四边形不等式优化的方程:
- DP的各种优化(动态规划,决策单调性,斜率优化,带权二分,单调栈,单调队列)
前缀和优化 当DP过程中需要反复从一个求和式转移的话,可以先把它预处理一下.运算一般都要满足可减性. 比较naive就不展开了. 题目 [Todo]洛谷P2513 [HAOI2009]逆序对数列 [D ...
- HDU 2829 Lawrence (斜率优化DP或四边形不等式优化DP)
题意:给定 n 个数,要你将其分成m + 1组,要求每组数必须是连续的而且要求得到的价值最小.一组数的价值定义为该组内任意两个数乘积之和,如果某组中仅有一个数,那么该组数的价值为0. 析:DP状态方程 ...
随机推荐
- 标题 发布状态 评论数 阅读数 操作 操作 CNN目标检测系列算法发展脉络简析——学习笔记(三):Fast R-CNN
最近两周忙着上网课.投简历,博客没什么时间写,姑且把之前做的笔记放上来把... 下面是我之前看论文时记的笔记,之间copy上来了,内容是Fast R-CNN的,以后如果抽不出时间写博客,就放笔记上来( ...
- Deep Protein Methylation Profiling by Combined Chemical and Immunoaffinity Approaches Reveals Novel PRMT1 Targets (结合层析法和免疫沉淀法的蛋白甲基化的深度检测技术发现了PRMT1新的靶标蛋白)
题目:Deep Protein Methylation Profiling by Combined Chemical and Immunoaffinity Approaches Reveals Nov ...
- 【攻防世界】simple-unpack
知识:upx脱壳 simple-unpack 难度系数: 3.0 题目来源: 暂无 题目描述:菜鸡拿到了一个被加壳的二进制文件 提示说有壳子:然后用PE分析发现是ELF upx的壳子
- 各种WAF绕过手法学习
原文:https://mp.weixin.qq.com/s/aeRi1lRnKcs_N2JLcZZ0Gg 0X00 Fuzz/爆破 fuzz字典 1.Seclists/Fuzzing https ...
- Linux上通过docker方式安装mysql
centos版本信息: docker版本信息 mysql版本:5.7 1.docker方式安装 首先拉取mysql镜像:docker pull mysql:5.7 查看本地的mysql镜像 执 ...
- 答应我,不会这些概念,简历不要写 “熟悉” zookeeper
整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 一口气说出 9种 分布式ID生成方式,面试官有点懵了 面试总被问 ...
- npm git 常用命令行 记录
1. 推出node命令行: 两次ctrl+C或者一次ctrl+D 退出终端:exit; 2.npm 常用 npm install <name> 安装包 npm install &l ...
- OpenCV-Python 对极几何 | 五十一
目标 在本节中 我们将学习多视图几何的基础知识 我们将了解什么是极点,极线,极线约束等. 基础概念 当我们使用针孔相机拍摄图像时,我们失去了重要信息,即图像深度. 或者图像中的每个点距相机多远,因为它 ...
- vscode下搭建typescript时提示"无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称"错误的解决方法
根据网上的教程,安装了node.js后,再安装了typescript,,,这时候编译生成或者在vscode的终端里调用npm或者tsc --version时,总是提示 npm : 无法将"n ...
- .NET 5.0 Preview 2发布
2020年4月2日微软.NET 团队的项目经理 Richard 在博客上 发布了.NET 5 Preview 2:https://devblogs.microsoft.com/dotnet/annou ...