常见的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优化类型的更多相关文章

  1. dp优化 | 各种dp优化方式例题精选

    前言 本文选题都较为基础,仅用于展示优化方式,如果是要找题单而不是看基础概念,请忽略本文. 本文包含一些常见的dp优化("√"表示下文会进行展示,没"√"表示暂 ...

  2. DP 优化方法大杂烩 & 做题记录 I.

    标 * 的是推荐阅读的部分 / 做的题目. 1. 动态 DP(DDP)算法简介 动态动态规划. 以 P4719 为例讲一讲 ddp: 1.1. 树剖解法 如果没有修改操作,那么可以设计出 DP 方案 ...

  3. LCIS tyvj1071 DP优化

    思路: f[i][j]表示n1串第i个与n2串第j个且以j结尾的LCIS长度. 很好想的一个DP. 然后难点是优化.这道题也算是用到了DP优化的一个经典类型吧. 可以这样说,这类DP优化的起因是发现重 ...

  4. MYSQL常见的可优化点

    MYSQL常见的可优化点 SQL常见的可优化点 2014年6月8日 DBA 发表回复 # #################################################### 索引 ...

  5. 【学习笔记】动态规划—各种 DP 优化

    [学习笔记]动态规划-各种 DP 优化 [大前言] 个人认为贪心,\(dp\) 是最难的,每次遇到题完全不知道该怎么办,看了题解后又瞬间恍然大悟(TAT).这篇文章也是花了我差不多一个月时间才全部完成 ...

  6. [总结]一些 DP 优化方法

    目录 注意本文未完结 写在前面 矩阵快速幂优化 前缀和优化 two-pointer 优化 决策单调性对一类 1D/1D DP 的优化 \(w(i,j)\) 只含 \(i\) 和 \(j\) 的项--单 ...

  7. DP 优化小技巧

    收录一些比较冷门的 DP 优化方法. 1. 树上依赖性背包 树上依赖性背包形如在树上选出若干个物品做背包问题,满足这些物品连通.由于 01 背包,多重背包和完全背包均可以在 \(\mathcal{O} ...

  8. NOIP2015 子串 (DP+优化)

    子串 (substring.cpp/c/pas) [问题描述] 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个 互不重 叠 的非空子串,然后把这 k 个子串按照其在字 ...

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

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

随机推荐

  1. Raspberry Pi开发之旅-光照强度检测(BH1750)

    一.前期准备 1.环境要求 GY30模块(BH1750FVI传感器),树莓派系统,python-smbus,iic开启 2.取消对IIC驱动的黑名单 nano /etc/modprobe.d/rasp ...

  2. python认识标识符

    #python标识符 Python在编程的时候,起的名字就叫做标识符,其中变量和常量就是标识符的一种 #命名原则 在python中标识符的命名是有规则的,按正确命名规则命名的可以使用的标示符叫做有效标 ...

  3. React-Native WebView动态加载字体

    背景 使用react-native构建的iOS/Android双端APP,通过WebView加载本地页面,需要根据服务器提供的字体列表实现下载和动态加载. 本地字体检查 有些字体手机操作系统已经提供了 ...

  4. 打造最强NGINX HTTPS

    SSL LABS 检测 完整配置如下 server { listen 443 ssl; server_name xxx.xxxke.com; ssl on; ssl_certificate /xxx/ ...

  5. Centos6.7 安装zabbix+apache+mysql教程(第一篇)

    Centos6.7 安装zabbix+apache+mysql教程 blog地址: http://www.cnblogs.com/caoguo ### 基本包安装 ### [root@ca0gu0 ~ ...

  6. Centos 安装配置iscsi

    在测试oracle rac的时候用iscsi来模拟磁阵的(真的磁阵需要多路径软件),简单的记录下 #scsi server yum install scsi-target-utils service ...

  7. ZOJ 3180 Number Game(模拟,倒推)

    题目 思路: 先倒推!到最后第二步,然后: 初始状态不一定满足这个状态.所以我们要先从初始状态构造出它出发的三种状态.那这三种状态跟倒推得到的状态比较即可. #include<stdio.h&g ...

  8. php第十九节课

    JQUERY <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  9. 9.2 Socket编程

    远程管理软件和黑客软件大多依赖于Socket来实现特定功能,前几年流行的端口反弹更是把这项技术发挥到了极致. 如前所述,UDP和TCP是网络体系结构的传输层运行的两大重要协议,其中,TCP适用于对效率 ...

  10. Jzzhu and Numbers

    Jzzhu and Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...