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 ...
随机推荐
- C++笔记(2)——函数
六. 函数 6.1 函数基础 一个典型的函数(function)定义包括:返回类型(return type).函数名字,由0或多个形参(parameter)组成的列表以及函数体.我们通过调用运算符来执 ...
- 基于Avalonia 11.0.0+ReactiveUI 的跨平台项目开发2-功能开发
基于Avalonia 11.0.0+ReactiveUI 的跨平台项目开发2-功能开发 项目简介:目标是开发一个跨平台的AI聊天和其他功能的客户端平台.目的来学习和了解Avalonia.将这个项目部署 ...
- pandas 利用openpyxl设置表格样式
writer = pd.ExcelWriter('/home/leo/Desktop/项目测试/922904.xlsx', engine='openpyxl') new_data.to_excel(w ...
- Linux系统远程拷贝命令:scp
做个记录,首先两台机器间要互通. 1. 将本地服务器的文件夹/文件拷贝到远程服务器上 语法: scp -r -P port local_folder/remote_file remote_userna ...
- c# 如何将程序加密隐藏?
下面将介绍如何通过LiteDB将自己的程序进行加密,首先介绍一下LiteDB. LiteDB LiteDB是一个轻量级的嵌入式数据库,它是用C#编写的,适用于.NET平台.它的设计目标是提供一个简单易 ...
- MacOS系统(M1/M2)安装AI绘画StableDiffusion保姆级教程
安装完成后,推荐阅读这篇教程:AI绘画:Stable Diffusion 终极炼丹宝典:从入门到精通 实操环境: macOS 13 Arm64(建议12以上的系统使用) Apple M1 先来看几个样 ...
- 接口自动化测试项目 | IHRM登录接口自动化测试
项目内容如下: ### 需求- 地址:http://ihrm-java.itheima.net/#/login- 测试接口: - 登录接口:针对登录的13个cases### 技术 - V1:pytho ...
- Code Llama:Llama 2 学会写代码了!
引言 Code Llama 是为代码类任务而生的一组最先进的.开放的 Llama 2 模型,我们很高兴能将其集成入 Hugging Face 生态系统!Code Llama 使用与 Llama 2 相 ...
- SpringBoot + 自定义注解,实现用户操作日志(支持SpEL表达式)
背景 一个成熟的系统,都会针对一些关键的操作,去创建用户操作日志. 比如: XX人创建了一条订单,订单号:XXXXXXXXX 因为操作人或者订单号是动态的,所以有些开发人员,不知道获取,就将这种操作日 ...
- 4-MySQL数据库的常用操作
在MySQL数据库中,增删改查操作是指对数据进行添加.删除.查询和修改的操作.这些操作在数据库管理和维护中非常重要,可以帮助数据库管理员和开发人员有效地管理数据和实现各种复杂的数据处理需求. 添加数据 ...