常见的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.

时间: 2024-10-16 09:38:57

常见的DP优化类型的相关文章

SQL常见的可优化点

此文章系在SQL代码文件中写的... # ########################################### # 索引相关 # ########################################### – 查询(或更新,删除,可以转换为查询)没有用到索引 这是最基础的步骤,需要对sql执行explain查看执行计划中是否用到了索引,需要重点关注type=ALL, key=NULL的字段. – 在索引字段上施加函数 to_char(gmt_created, ‘mm

LCIS tyvj1071 DP优化

思路: f[i][j]表示n1串第i个与n2串第j个且以j结尾的LCIS长度. 很好想的一个DP. 然后难点是优化.这道题也算是用到了DP优化的一个经典类型吧. 可以这样说,这类DP优化的起因是发现重复计算了很多状态,比如本题k的那层循环. 然后就可以用maxl标记搞一下,将O(n^3)变成O(n^2). #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> usi

MYSQL常见的可优化点

MYSQL常见的可优化点 SQL常见的可优化点 2014年6月8日 DBA 发表回复 # #################################################### 索引相关# ###################################################1. 查询(或更新,删除,可以转换为查询)没有用到索引这是最基础的步骤,需要对sql执行explain查看执行计划中是否用到了索引,需要重点关注type=ALL, key=NULL的字段.

常见数据库的优化方式

? 目录 一.常见数据库的优化方式:????1 二.提高效率,反三范式:????1 第一范式:????1 第二范式:????1 第三范式:????1 反三范式设计:????2 三.定位慢查询.????3 四.索引的讲解:????6 五.explain工具的讲解????9 六.索引应用讲解:????10 七.并发处理的锁机制:????16 八.分表技术????17 九.分区技术????18 10.其他调优:????20 ? ? 一.常见数据库的优化方式: 我们之前讲的静态化,memcache主要是

几种常见的虚拟镜像类型

.vdi :virtualbox默认的虚拟硬盘文件格式 .vdmk:vmware默认的虚拟硬盘文件格式 .vhd:微软virtualPC默认的虚拟硬盘文件格式 .hdd:parallel desktop默认的虚拟硬盘文件格式 几种常见的虚拟镜像类型

Windows上常见的集中布尔类型的比较

博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:Windows上常见的集中布尔类型的比较.

hdu5009 离散化+dp+优化

西安网络赛C题.先对大数据离散化,dp优化 #include<iostream> //G++ #include<vector> #include<cstdio> #include<algorithm> #include<cstring> #include<string> #include<queue> #include<cmath> using namespace std; const int maxn=512

蓝鸥零基础学习HTML5第七讲 常见标签及标签类型的转换

蓝鸥零基础学习HTML5第七讲 常见标签及标签类型的转换 1.常见标签-块属性的标签 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" href="css/reset.css"> </head> <

loj6171/bzoj4899 记忆的轮廊(期望dp+优化)

题目: https://loj.ac/problem/6171 分析: 设dp[i][j]表示从第i个点出发(正确节点),还可以有j个存档点(在i点使用一个存档机会),走到终点n的期望步数 那么 a[i][k]表示i点为存档点,从i点走到k点(正确节点)的期望步数(中间没有其它存档点) 那么a[i][j]可以递推预处理出 其中g[v]表示从一个错误节点v开始走,期望走g[v]步会读档 解方程可以解出 s[j-1]就是点j-1出去的所有错误儿子的g[v]之和 那么接下来只要知道如何求g[v]就行了