DP优化方法杂记
一些奇妙trick
观察决策集合
此类问题与单调队列优化dp有部分相似,都是利用决策集合的特殊性质对dp进行优化。
CF229D Towers
题意:给出一个序列,每次可以花费一体力合并相邻两个数,问使此序列形成一个非递减序列最少需要花费多少体力。
由于有明显的操作,考虑从转移角度设计方程,从左往右合并,由于合并只发生在相邻的数对中,而目标为一个非递减序列,主要影响是否合并的就是前一个数的权值,记 \(f_{i,j}\) 表示使前 \(i\) 个数非递减,最后一个数由 \(j\) 到 \(i\) 合并来的最小体力,可以得到一个 \(\Theta(n^3)\) 的方程为 $ f_{i,j}=\min\limits_{1\le k \le j}f_{j,k}+(i-j) $,满足 \(sum_i-sum_{j-1}\ge sum_{j-1}-sum_{k-1}\)。
观察需要满足的条件,可以发现对于一个固定的 \(j\),随着 \(i\) 的增长,能转移的 \(k\) 的集合也只增不减,因此我们可以对于没有 \(j\) 维护一个指针,表示已经求得的 \(k\) 的集合的最右端,每次判断指针是否能够移动并更新最小值,我们定义每次判断分为失败判断和成功判断,由于失败判断每次判断只会产生一次,成功判断对于每个状态也只会产生一次,因此复杂度为均摊 \(\Theta(n^2)\),可以通过此题。
对于进一步的优化,可以查看单调队列优化中的 [CSP-S2019] 划分一题,思路大体相同。
DS优化dp
单调队列优化dp
算法介绍
单调队列优化dp通常与状态转移方程中的单调性息息相关,这里的单调性通常指的是决策的单调性,如果把状态看做空间中的点,在决策集合不断扩大的同时,最优决策点随某一维度不断增长的同时增长就是决策单调性,通俗地说,在满足决策单调性的方程中,现在的最优方案来源一定在前面来源的“后面”。
而单调队列优化dp则是当转移范围受到两个变量限制,并且决策集合只定向移动时,用单调队列维护决策集合的变化。因此,在dp中,如果某一状态的答案选取范围有一些特殊性质时,你就可以尝试分析是否有单调性等特殊性质,成为解题的关键。
决策集合大小固定
此类为最常见的单调队列类题目,通常对于每个状态都有固定的转移范围,注意观察题目中固定的信息,用单调队列进行维护。
P2569 [SCOI2010]股票交易
决策集合不断变化
在决策集合不断变化的题目中也可以使用单调队列,只要保持定向移动的特性即可。
P5665 [CSP-S2019] 划分
DP优化方法杂记的更多相关文章
- DP 优化方法大杂烩 & 做题记录 I.
标 * 的是推荐阅读的部分 / 做的题目. 1. 动态 DP(DDP)算法简介 动态动态规划. 以 P4719 为例讲一讲 ddp: 1.1. 树剖解法 如果没有修改操作,那么可以设计出 DP 方案 ...
- DP 优化方法合集
0. 前言 写完这篇文章后发现自己对于 DP 的优化一窍不通,所以补了补 DP 的一些优化,写篇 blog 总结一下. 1. 单调队列/单调栈优化 1.2 算法介绍 这应该算是最基础的 DP 优化方法 ...
- [总结]一些 DP 优化方法
目录 注意本文未完结 写在前面 矩阵快速幂优化 前缀和优化 two-pointer 优化 决策单调性对一类 1D/1D DP 的优化 \(w(i,j)\) 只含 \(i\) 和 \(j\) 的项--单 ...
- [DP优化方法之虚树]
首先我们看一篇文章 转自xyz: 给出一棵树. 每次询问选择一些点,求一些东西.这些东西的特点是,许多未选择的点可以通过某种方式剔除而不影响最终结果. 于是就有了建虚树这个技巧..... 我们可以用l ...
- [DP优化方法之斜率DP]
什么是斜率dp呢 大概就把一些单调的分组问题 从O(N^2)降到O(N) 具体的话我就不多说了 看论文: http://www.cnblogs.com/ka200812/archive/2012/08 ...
- dp常见优化方法
noip范围内的dp优化方法: 加速状态转移 1.前缀和优化 2.单调队列优化 3.线段树或树状数组优化 精简状态 3:精简状态往往是通过对题目本身性质的分析,去省掉一些冗余的状态.相对以上三条套路性 ...
- DP 优化小技巧
收录一些比较冷门的 DP 优化方法. 1. 树上依赖性背包 树上依赖性背包形如在树上选出若干个物品做背包问题,满足这些物品连通.由于 01 背包,多重背包和完全背包均可以在 \(\mathcal{O} ...
- LCA 各种神奇的LCA优化方法
LCA(Least Common Ancestors) 树上问题的一种. 朴素lca很简单啦,我就不多说了,时间复杂度n^2 1.倍增LCA 时间复杂度 nlongn+klogn 其实是一种基于朴素l ...
- Space Elevator [POJ2392] [DP][优化]
题目大意 n件物品,第i件hi高,有ci件,最高的一件不能超过ai的高度.问最高能堆多高 输入: 第一行,一个n 接下来每一行,为hi,ai,ci 输出,最高堆多高 样例输入: 37 40 35 23 ...
- 取数字(dp优化)
取数字(dp优化) 给定n个整数\(a_i\),你需要从中选取若干个数,使得它们的和是m的倍数.问有多少种方案.有多个询问,每次询问一个的m对应的答案. \(1\le n\le 200000,1\le ...
随机推荐
- 6月有奖征文挑战,ZEGO开发者社区首季活动报名入口!
前 言 哈喽 开发者们: ZEGO即构科技作为一家20年技术积累的音视频云服务商,已经为全球200+个国家的企业服务,单日通话时长突破30亿+分钟,现下即构开发者社区举办首期征文活动!本次征文活动围绕 ...
- Stable Diffusion修复老照片-图生图
修复老照片的意义就不多说了,相信大家都明白,这里直接开讲方法. 1.原理 这个方法需要一个真实模型,以便让修复的照片看起来比较真实,我这里选择:realisticVisionV20,大家有更好的给我推 ...
- 利用InnoStep在VS编译时自动构建安装包
摘要 很多同学在C/S开发领域或多或少都可能会遇到需要制作安装包的场景,打包的工具也是五花八门,例如有NSIS.InstallShield.Wix Toolset.ClickOnce等等,这里以Inn ...
- MyBatis使用注解开发(及Sqlsession连接器的本质)
使用注解开发 底层实现机制是反射和,动态代码.反射可以获得这个类的方法属性还可以创建对象,执行方法. 面向接口编程 之前学过,面向对象编程,也学习过接口.但是真正的开发中,很多时候我们会选择面向接口编 ...
- python2.7源码安装方式
安装python2.7 下载Python 2.7, 下载地址 解压安装 tar -xzvf Python-2.7.15.tgz cd Python-2.7.15 ./configure --prefi ...
- 【go笔记】标准库-strings
标准库-strings 前言 标准库strings用于处理utf-8编码的字符串. 字符串比较-Compare func Compare(a,b string) int 若 a==b ,则返回0:若 ...
- phpexcel图片获取
phpexcel图片获取常见的两种方式: require_once dirname(__FILE__) . '/../Jn/PHPExcel.php'; $filePath = "123.x ...
- centos7.X安装mysql5.7 – 东凭渭水流
1.下载mysql5.7 可以使用windows下载好后上传至Linux.网络条件好的推荐使用 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/m ...
- 设置服务账号Service Accounts(sa)的token不挂载到pod
目录 一.系统环境 二.前言 三.Service Accounts(sa)简介 四.在pod里设置sa的token不挂载到pod 五.在sa里设置sa对应的token不挂载到pod上 六.总结 一.系 ...
- android webview调用js(vue)问题记录
这几天和别人对接移动端,安卓平台,我们这边输出vue界面,安卓方反馈轮询的时候调用不到,具体原因也定位不到,只能确定前端这边没几句代码,应该没有问题,因此决定自己下载个android studio写个 ...