TQX 的 DP AAgain!
闲话:
这确实抽象,将所有人给干离线了……
不如叫做 TQX 的离线 DP QwQ
DP
基本思路就是找一个比较好的能够描绘问题的状态,想怎么转移,再进行优化。
--TQX
背包 DP
根号分治优化背包,大概就是利用 \(cnt \times siz \ge cap\) 将多重变为完全,然后统一转移。
区间 DP
复杂度越高的题越难?(雾
区间 DP 简单的就是 \(f_{l, r}\) 这个限制,但是常常来说这是无法解决问题的(除非实在简单
所以需要辅助以与问题相关的信息,例如 \(\max, \min, \cdots\) 才能进行转移。
值得注意的是区间 DP 的常数很小,如果枚举了 \(n\) 个位置(单调)那么将带有 \(\frac 1 {n!}\) 的常数!所以 \(O(n^7)\) 不是梦,\(50\) 也能过。
P5336 [THUSC2016] 成绩单 大概说的就是转移代价与 \(\min, \max\) 相关但是与区间内有什么无关,那么就在区间 DP 同时维护最大/最小是什么即可,复杂度 \(O(n^5)\)
AGC035D Add and Remove 很抽象的区间 DP,大概是说这次我们不顺着来考虑了,从外到内考虑。发现删除中间那个数,会对左右两边各做一次贡献,那么我们可以设 \(f_{i, j, x, y}\) 表示 \(i, j\) 分别对左右两边做 \(x, y\) 次贡献的最小代价。最终答案就是 \(f_{1, n, 1, 1}\),那么转移也就简单了,中间那个会对左边来 \(x\) 次,右边来 \(y\) 次,也就是左边区间内的东西对两侧分别 \(x + y, y\),右边则是 \(x, x + y\),那么递归下去搜索即可。
[AGC039E] Pairing Points 区间计数 DP……敢信 \(O(n^7)\) 能过!大概是说要善于利用 树 的性质:没有三条边互相相交,那么我们枚举一个点对应的点,那么就可以分成两个区间,这两个区间间形成鱼骨状的联系。

那么需要联通,两边至少需要一个跨过中线的东西吧,这总会有一个最顶顶上的吧,那么分成了 \(4\) 块,两两需要联通,状态这不就没了吗?但是发现其实只会有 \(3\) 块!

因为一定会存在两个分界点(绿色)使得分成独立的三部分。
那么思路就清晰了,我们只需要知道分界点,那么就可以枚举最上面的那条线,以及下面的两个分界点即可。于是得出式子:\(f_{l, r, m} = \sum_{x \in [l, m), y \in (m, r]} \sum_{p \in [x, m), q \in (m, y]} f_{l, x, p} f_{q, y, r} f_{p + 1, m, q - 1}\),直接做是 \(O(n^7)\) 的但是带一个 \(\frac 1 {7!}\) 的常数,能过。
容易利用先枚举绿色断点的方式优化到 \(O(n^5)\)。
树形 DP
或许如果将子树利用 dfn 转化为一个区间,那么树形 DP 可能也可以转化为区间 DP 的模型。只是在这里区间要么相交,要么相离,所以树形 DP 应该是不难于区间 DP 的(雾
经常与线段树合并/长链剖分/动态 DP 等算法结合出现,令人闻风丧胆,不过感觉这些主要考察数据结构。
--TQX
CF1517F Reunion 大概说的是求白点扩展 \(r\) 格覆盖所有点的方案数。那么考虑一个朴素的 DP:\(f_{x, i, j}\) 表示 \(x\) 子树内最深的黑点和最浅的白点的距离。那么转移是简单的。但是复杂度为 \(O(n^5)\),是无法过的,所以考虑如果白点存在且覆盖了所有黑点,那么只需要记录白点是什么,同理,如果黑点没有被完全覆盖,那么白点没有用,就只需要记录黑点是啥就行了,复杂度被优化为 \(O(n^3)\)。
[AGC034E] Complete Compress 非常神奇,大概就是说基于一个贪心的思路,考虑移动祖孙点是不优的,那么我们只需要移动不同子树内的东西即可。但是也不能把子树内的全部搞定了,因为可能需要分一点出来在祖先的地方平衡其他的子树,这启示我们可以考虑维护一个上下界,表示能达到的状态。考虑到每次移动使得两个点深度 \(-1\),启示我们可以利用 \(\sum dep\) 作为状态转移,那么设 \(f_i, g_i\) 分别表示上下界,那么细细转移即可。上界是简单的,就是不需要移动,而下界不简单,考虑如果有一个子树太深,那么怎么也无法使得下界为 \(0/1\),那么将 \(mx = \max g_y\) 求出来,如果 \(S = \sum \min(f_y + siz_y, mx) < 2 mx\),那么显然就达不到 \(0/1\),反之就可以。至于是 \(0/1\),考虑到每次操作总深度减少的一定是 \(2\),那么这就取决于 \(f_i\) 的奇偶性。朴素的每个点都要作为一次根,考虑换根即可做到 \(O(n)\)。
[Ynoi2006] spxmcq 朴素的很简单,\(f_x = w_x + \sum \max (f_y, 0)\),但是需要优化,\(O(nq)\) 显然不够。大概说就是考虑将 \(x\) 离线升序排序,那么显然的是 \(\max (f_y, 0)\) 会在某前段时间为 \(0\),在某后段时间为 \(f_y\),那么我们只需要知道 \(f_y\) 在什么时候变成 \(> 0\) 的,那么就可以得出 \(x\) 的答案即对其联通的子树求和简单即可。不妨设某个根 \(x\),考虑什么时候 \(f_x > 0\),假设其所在的联通块大小为 \(siz\),原本的权值和为 \(wei\),那么只需要当 \(w > \frac {-wei}{siz}\) 的时候就可以使得 \(f_x > 0\) 了!那么利用 set 存一存,注意新连接一个子树需要更新一下其变化的时间!
CF1326G Spiderweb Trees 咕
数位 DP
一般需要单独处理卡上界的情况,可以将卡上界作为一个状态,也可以直接把上界拆开。通常同时有上下界时会将区间答案转化为前缀和相减。
--TQX
P2657 windy 数 板子题,略。
【UER#4】被粉碎的数字 大概就是简单的在数位 DP 的同时维护一个进位,考虑最后我们需要只是相等,那么再维护一个差值,也就是 \(f_{i, x, d}\) 表示考虑到 \(i\) 位,前面进过来了 \(x\) 位,当前差值为 \(d\),卡个上界记忆化即可。
CF1456E XOR-ranges 非常抽象的一个数位区间 DP。注意到有上下界,这是不好处理的,但是可以发现的是只有 \(O(k)\) 种脱离上下界的方法,之后就可以任意填了。考虑最后脱离限制的那位,显然的是之后全放 \(0\) 或者全放 \(1\) 是最优的,那么考虑枚举区间最后脱离的位,如果 \(l - 1, r + 1\) 在之后存在一位不同,那么这一位一定需要做出贡献。于是可以搞出一个区间 DP,设 \(f_{c, l, r, 0/1, 0/1, 0/1, 0/1}\) 表示区间 \(l, r\) 在 \(c\) 退位,左右顶着上/下界,下面填的是 \(0\) 还是 \(1\),之后枚举断点转移即可。
状压 DP
CF1158F Density of subarrays 更加抽象的状压 DP。注意到当 \(c\) 很小的时候,我们就可以简单的状压,做到 \(O(\frac {n^2 2^c}{c})\)。但是当 \(c\) 很大的时候这就显得无能为力,可能需要将 \(O(2^c)\) 替换为 \(O(n)\)。接着就可以发现,利用背包,设 \(f_{i, j}\) 表示前 \(i\) 个分 \(j\) 段的方案数,接下来就是 \(g_{l, r}\) 表示转移的系数,表示必须选 \(l\),并且在 \(l, r\) 中选了一些使得密度为 \(1\) 的方案数,那么直接转移即可。注意加 register 卡卡常。
DP 的优化
通常优化 DP,除了改变状态之外,也可以通过分析转移的性质,进而改变枚举方法或者结合一些其他算法来进行优化。
--TQX
单调队列,非常朴实,咕
slope trick,大概就是说利用堆维护 DP 函数的斜率,从而转移。一般来说是将 \(f_{i, x}\) 看成一个关于 \(x\) 的函数 \(f_{i}(x)\),然后维护其形状转移到下一个函数 \(f_{i + 1}(x)\),一般来说转移加凸函数(如绝对值)的就可以考虑凸优化。
Red Black Tree 注意到 \(O(n^2)\) DP 是简单的:\(f_{x, k} = \min_{i = 0/1} (g_{x, i} + \sum f_{y, k - i})\),其中 \(i = 1\) 表示是黑色,\(g_{x, i}\) 是修改为颜色 \(i\) 的代价。可以归纳得出 \(f_x\) 是个凸函数,那么合并时暴力加起来,插入 \(1/-1\) 即可。
[APIO2016] 烟火表演 与上一题类似,加一个可并堆即可。
斜率优化,大概就是说 \(f_x = f_y + c_x + c_y + g_x g_y\) 这种东西,其中 \(c_x, c_y, g_x, g_y\) 都是已知,但是 \(f_y\) 需要 DP 计算,那么就可以利用斜率优化完成,可以看 # 算法学习笔记(31): 李超线段树
决策单调性,与四边形不等式(交叉小于包含)强相关。对于 2D1D 的问题,如果 \(w(l, r)\) 满足四边形不等式以及包含单调性(\(l \le x \le y \le r \to w(l, r) \ge w(x, y)\))那么整个 DP 满足四边形不等式,就可以优化为 \(O(n^2)\) 了。
但是对于 1D1D 的区间单调性,就需要神秘的方法:单调栈与二分。
大概就是说既然决策单调,那么每一个部分管的区间就是一个区间……那么就可以类似单调栈的搞它。
但是如果仅仅只是 \(f_i = w(j, i)\) 的东西,那么可以利用分治解决。
Artistic Partition 大概就是说最朴素的 DP 就是 \(f_{i, j} = f_{i - 1, k} + w(k + 1, j)\),注意到这里 \(w(k + 1, j)\) 满足四边形不等式,那么就可以利用分治优化。注意到直接计算不简单,考虑利用莫队(注意分治时用莫队只有常数上的开销!)只是这里莫队转移要带一个 \(O(d(V))\) 的代价,所以单次转移复杂度为 \(O(n \log^2 n)\)。注意到当 \(k\) 很大的时候,总可以构造出一个方案使得答案抵着下界 \(n\),不难发现这是 \(O(\log n)\) 的,于是只需要转移 \(O(\log n)\) 次即可。其实也可以 \(O(n \sqrt n)\) 的预处理式子(利用整除分块),做到 \(O(1)\) 回答,那么总复杂度为 \(O(n \log^2 n + n \sqrt n)\)。
最后
DP,可以说是重中之重,在最优化和计数中常常能见到它的身影。
它没啥套路,又全是套路 QwQ,最可恶的一集。
TQX 的 DP AAgain!的更多相关文章
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4142 Solved: 1964[Submit][Statu ...
- 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...
- AEAI DP V3.7.0 发布,开源综合应用开发平台
1 升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...
- AEAI DP V3.6.0 升级说明,开源综合应用开发平台
AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...
- BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4026 Solved: 1473[Submit] ...
- [斜率优化DP]【学习笔记】【更新中】
参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...
- BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9812 Solved: 3978[Submit][St ...
- px、dp和sp,这些单位有什么区别?
DP 这个是最常用但也最难理解的尺寸单位.它与“像素密度”密切相关,所以 首先我们解释一下什么是像素密度.假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算 ...
- android px转换为dip/dp
/** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public int dipTopx(Context context, float dpValue) { final floa ...
- POJ 3254. Corn Fields 状态压缩DP (入门级)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9806 Accepted: 5185 Descr ...
随机推荐
- ajax,axios和fetch三者间的区别.
ajax: 1. 传统 Ajax 指的是 XMLHttpRequest(XHR), 最早出现的发送后端请求技术,隶属于原生js中,核心使用XMLHttpRequest对象,多个请求之间如果有先后关系的 ...
- Oracle使用存储过程实现多行对同行数据排列组合
Oracle使用存储过程实现同行数据排列组合 对多行的同一行的多列数据进行排列组合 假设获取的原来的数据如下表 A B C D aa ab ac ad 现在我们需要对数据进行处理,将每一行的数据,类似 ...
- 提质增效,安全灵活,阿里云EDA上云方案让芯片设计驶入高速路
简介: 今天下午14点,直播间等你 导语:随着芯片工艺的跃升,EDA 需要越来越大的计算能力,处理高达PB级的海量数据.传统的算力交付模式已无法跟上快速发展的芯片设计行业,云的快速交付与强大生态提供了 ...
- 中仑网络全站 Dubbo 2 迁移 Dubbo 3 总结
简介: 中仑网络在 2022 年完成了服务框架从 Dubbo 2 到 Dubbo 3 的全站升级,深度使用了应用级服务发现.Kubernetes 原生服务部署.服务治理等核心能力.来自中仑网络的技术负 ...
- RocketMQ 5.0: 存储计算分离新思路
简介: 在阿里云上,RocketMQ 的商业化产品也以弹性云服务的形式为全球数万个用户提供企业级的消息解决方案,被广泛应用于互联网.大数据.移动互联网.物联网等领域的业务场景,成为了业务开发的首选消息 ...
- Elastic与阿里云助力汽车及出行产业数字化转型
简介:目前,阿里云和Elastic在全国已经有很多的项目正在开展合作,而在移动出行领域与享道出行的合作案例,则是代表性的. 在汽车产业变革逐步深入的当下,云计算.大数据等信息技术成为了汽车企业经历数 ...
- kubernetes pv-controller 解析
简介:pv controller是 kcm 的组件之一,它负责处理集群中的pvc/pv对象,对pvc/pv 对象进行状态转换.本文将基于 kubernetes 1.23进行解析. 作者 | 牧琦 ...
- [FE] jsoneditor 在 vue-router 和 vue-ssr 渲染下出现两个实例的问题
由于 vue-router 页面是无刷新的,如果存在两次渲染,会出现如下情形. 简单粗暴的解决办法是通过判断容器中是否已经有了子节点. 此时再从其他 router link 返回就不会重复渲染了. M ...
- [Mobi] 什么是手机 Root 和 Magisk、Magisk App
手机进行 Root 操作就是让我们能够拥有超级权限,包括被手机厂商所禁止的一些操作. 传统 Root 手段会修改系统文件,因而一些安全性要求较高的 App 会禁止自己在 Root 过的手机上运行. M ...
- 【python爬虫案例】用python爬豆瓣读书TOP250排行榜!
目录 一.爬虫对象-豆瓣读书TOP250 二.python爬虫代码讲解 三.讲解视频 四.完整源码 一.爬虫对象-豆瓣读书TOP250 今天我们分享一期python爬虫案例讲解.爬取对象是,豆瓣读书T ...