常见的DP优化类型
常见的DP优化类型
1单调队列直接优化

如果a[i]单调增的话,显然可以用减单调队列直接存f[j]进行优化。
2斜率不等式

即实现转移方程中的i,j分离。b单调减,a单调增(可选)。
令:

在队首,如果g[j,k]>=-a[i],那么j优于k,而且以后j也优于k,因此k可以重队列中直接删去。在队尾,如果x<y<z,且g[x,y]<=g[y,z],也就是说只要y优于x一定可以得出z优于y的,我们就删去y。
经过队尾的筛选,我们在队列中得到的是一个斜率递减的下凸包,每次寻找从上往下被-a[i]斜率的线所扫到的第一个点,a[i]单调的话通过队首的维护我们可以在均摊O(1)的时间内找到这个点。值得注意的是,即使a[i]不单调,我们仍然可以通过二分在O(log n)的时间内找到转移点。
高维的场合和低维并没有区别。只要使用斜率和单调队列优化,一定可以降一维。高维时可以没有j<i的限制,这时我们理解成若干条b[j]*x+f[j]的直线形成一个下凸包求值器,然后带入一个a[i]作为x计算得的结果就是答案,时间是O(nlogn)。
3下凸包求值器(CF-455E)
这是一种很奇怪的情况。有些时候,问题可以转化成给定一堆直线K[i]*X+B[i],每次询问选择连续的一段[a..b]和一个x,求最小值。
做法是构造一个下凸包求值器,实现对给定x求值和合并两个功能,内部实现是按K排好序的线段序列。然后线段树每个节点维护一个求值器。这样可以在O(nlognlogn)的时间内解决问题。
4分治优化

元素的分组合并问题通常拥有以上的形式。优化的条件是A[i,j]的单调性,也就是说A[i,j]<=A[i,j+1]。也即要求C[k,j]满足四边形不等式C[a,c]+C[b,d]<=C[a,d]+C[b,c] 。(含义是:越晚并入新元素,并入的组尺寸越小,其额外代价越小。这里四边形不等式已经是充分条件了,不需要区间单调)
优化的伪代码如下:
compute(i,l,r,ol,or)
1. 令m=(l+r)>>1
2. 寻找k=ol..or,使得dp[i,m]=dp[i-1,k]+C[k,m]最小
3. 如果l==r,返回。否则执行compute(i,l,m-1,ol,k);compute(i,m+1,r,k,or);
5四边形不等式
四边形不等式优化应用于区间DP:

要求C[i,j]满足四边形不等式C[a,c]+C[b,d]<=C[a,d]+C[b,c]和区间单调性C[b,c]<=C[a,d]。注意这里的C不在转移方程的内部,而是一个定值。
满足上件的前提下,有A[i,j-1]<=A[i,j]<=A[i+1,j](关键条件),因此可以优化。优化方法为以|i-j|的递增顺序DP,同时记录各个A[i,j]值,枚举时在A[i,j-1]和A[i+1,j]的区间卡内枚举。
6矩阵优化
一眼能看出来就是快速幂。多为期望或概率DP。
7线段树优化
通常是有不确定的强制转移的场合。如FAFU1231。

此时因A[i],B[i]欠缺单调性,单调队列的使用受到限制,用线段树即可解决。如斜率优化中掺杂此种限制,则同上3.
常见的DP优化类型的更多相关文章
- dp优化 | 各种dp优化方式例题精选
		
前言 本文选题都较为基础,仅用于展示优化方式,如果是要找题单而不是看基础概念,请忽略本文. 本文包含一些常见的dp优化("√"表示下文会进行展示,没"√"表示暂 ...
 - DP 优化方法大杂烩 & 做题记录 I.
		
标 * 的是推荐阅读的部分 / 做的题目. 1. 动态 DP(DDP)算法简介 动态动态规划. 以 P4719 为例讲一讲 ddp: 1.1. 树剖解法 如果没有修改操作,那么可以设计出 DP 方案 ...
 - LCIS tyvj1071 DP优化
		
思路: f[i][j]表示n1串第i个与n2串第j个且以j结尾的LCIS长度. 很好想的一个DP. 然后难点是优化.这道题也算是用到了DP优化的一个经典类型吧. 可以这样说,这类DP优化的起因是发现重 ...
 - MYSQL常见的可优化点
		
MYSQL常见的可优化点 SQL常见的可优化点 2014年6月8日 DBA 发表回复 # #################################################### 索引 ...
 - 【学习笔记】动态规划—各种 DP 优化
		
[学习笔记]动态规划-各种 DP 优化 [大前言] 个人认为贪心,\(dp\) 是最难的,每次遇到题完全不知道该怎么办,看了题解后又瞬间恍然大悟(TAT).这篇文章也是花了我差不多一个月时间才全部完成 ...
 - [总结]一些 DP 优化方法
		
目录 注意本文未完结 写在前面 矩阵快速幂优化 前缀和优化 two-pointer 优化 决策单调性对一类 1D/1D DP 的优化 \(w(i,j)\) 只含 \(i\) 和 \(j\) 的项--单 ...
 - DP 优化小技巧
		
收录一些比较冷门的 DP 优化方法. 1. 树上依赖性背包 树上依赖性背包形如在树上选出若干个物品做背包问题,满足这些物品连通.由于 01 背包,多重背包和完全背包均可以在 \(\mathcal{O} ...
 - NOIP2015 子串 (DP+优化)
		
子串 (substring.cpp/c/pas) [问题描述] 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个 互不重 叠 的非空子串,然后把这 k 个子串按照其在字 ...
 - Windows上常见的集中布尔类型的比较
		
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:Windows上常见的集中布尔类型的比较.
 
随机推荐
- Android studio & SDK的国内有效站点。
			
SDK.TOOLS的国内有效镜像节点: mirrors.zzu.edu.cn/android/repository/ 网上的地址只写了mirrors.zzu.edu.cn,有误,需要补齐后面的子目录才 ...
 - Leetcode0457--Circular Array Loop
			
[转载请注明]https://www.cnblogs.com/igoslly/p/9339478.html class Solution { public: bool circularArrayLoo ...
 - 《Java编程的逻辑》第一部分 编程基础与二进制
 - CSS——滑动门
			
在背景图片中可以对图片进行圆角设置,但是这样是写死的.如下图: 情况分析:如果我们li标签中的文字变少了或者变多了,我们就需要重新定义背景图片.所以我们使用滑动门技术.它将图片特殊地方进行分割.宽度利 ...
 - Android studio在使用过程中的问题总汇!
			
使用android studio也有一段时间了,汇总了一下这段时间内遇到一些常见问题,希望能够帮助到大家! 一.字体大小问题 在android studio的使用过程中没有发现类似于Eclipse中的 ...
 - 【译】x86程序员手册15-5.2页转换
			
5.2 Page Translation 页转换 In the second phase of address transformation, the 80386 transforms a linea ...
 - RAID技术简单分析
			
RAID技术解析 RAID:独立磁盘冗余阵列(Redundant Array of Independent Disks) RAID技术就是将许多块硬盘设备组合成一个容量更大.更安全的硬盘组,可以将数据 ...
 - HDU_1087_Super Jumping! Jumping! Jumping!_dp
			
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
 - 扩增子图表解读3热图:差异菌、OTU及功能
			
热图是使用颜色来展示数值矩阵的图形.通常还会结合行.列的聚类分析,以表达实验数据多方面的结果. 热图在生物学领域应用广泛,尤其在高通量测序的结果展示中很流行,如样品-基因表达,样品-OTU相对丰度矩 ...
 - Python 之pygame飞机游戏
			
import pygame from pygame.locals import * import time import random # 我机 class HeroPlane(object): de ...