首页 > 其他分享 >TQX 的 DP AAgain!

TQX 的 DP AAgain!

时间:2023-12-20 16:00:33浏览次数:33  
标签:那么 AAgain TQX 需要 区间 优化 DP

闲话:
这确实抽象,将所有人给干离线了……
不如叫做 TQX 的离线 DP QwQ

DP

基本思路就是找一个比较好的能够描绘问题的状态,想怎么转移,再进行优化。

--TQX

背包 DP

loj 6089. 小 Y 的背包计数问题

根号分治优化背包,大概就是利用 \(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

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)\) 的东西,那么可以利用分治解决。

最后

DP,可以说是重中之重,在最优化和计数中常常能见到它的身影。

它没啥套路,又全是套路 QwQ,最可恶的一集。

标签:那么,AAgain,TQX,需要,区间,优化,DP
From: https://www.cnblogs.com/jeefy/p/17916685.html

相关文章

  • wordpress博客系统
    wordpress博客系统LNMP:Linux+nginx+mysql+php一个操作系统+web网站+一个数据库存放数据+后端编程语言基于红帽操作系统来搭建1.需要一个本地yum仓库[[email protected]]#vimlocal.repo[local]name=localbaseurl=file:///mediaenabled=1gpgcheck=0[root@ser......
  • subprocess.CalledProcessError: Command ‘[‘ninja‘, ‘-v‘]‘ returned non-zero
    一、原因pytorch版本大于1.5二、解决1、降低pytorch版本将pytorch版本降到1.5以下2、禁用ninjiapytorch默认使用ninjia作为backend,将其禁用。替换为以下代码setup(...,cmdclass={#'build_ext':BuildExtension,'build_ext':BuildExtensi......
  • 宝塔面板搭建部署wordpress个人网站实现无公网即可远程访问(小白建站福音!!)
    WordPress是一个非常灵活和强大的博客建站平台,适用于各种不同类型的网站建设需求。简单几步实现宝塔面板结合cpolar工具实现无公网远程访问,无需云服务器即可发布自己的网站到公网访问1.环境安装wordpress运行需要PHP环境,我们在宝塔商店中我们搜索PHP8.0版本安装 然后安......
  • 金牌导航-期望概率DP
    期望概率DP例题A题解首先,对于随机变量\(X\)如果设随机变量\(Y\)的取值集合是\(I(Y)\),那么有全期望公式\[E(X)=\sum_{y\inI(Y)}E(X|Y=y)\timesP(Y=y)\]其中,\(E(X|Y=y)\)表示在\(Y=y\)的条件下\(X\)的期望取值。对于这道题,长度增加一对答案的贡献是\(3E^2(x)+3E(x......
  • 状压 DP 学习笔记
    前言2023.8.30开始停课集训。开始补\(CSP-S\)的知识点,先打算来学状压\(DP\)。定义状压\(DP\)的全称是状态压缩动态规划,也是动态规划中的一种。但是其与普通\(DP\)不同的是它将某种状态(一般为二进制\(01\)串,\(1\)表示选,\(0\)表示不选。也有其它进制)作为了\(dp\)......
  • DP1363F高性能、多协议NFC读卡IC
     DP1363F是一款高度集成的非接触读写芯片,集强大的多协议支持、最高射频输出功率,以及突破性技术低功耗卡片检测等优势于一身,满足市场对更高集成度、更小外壳和互操作性的需求,适用于银行、电子政务、交通、移动支付等众多基础设施应用。相关参数DP1363F支持下列操作模式:•读写......
  • Wordpress modown8.8.1主题学习版开心版
    Modown是模板兔基于Erphpdownwordpress下载插件开发的付费下载资源、付费下载源码、收费附件下载、付费阅读查看隐藏内容、团购下载的WordPress主题,本站提供Modown主题开心版,免授权使用,仅用于个人学习,禁止用于商业用途!!!下载地址:https://www.itwk.cc/circle/921.html......
  • Flutter使用SharedPreferences示例
    SharedPreferencesAndroid原生开发经常会用SharedPreferences来保存一些设置,Flutter用什么来保存这些设置呢?在Flutter中,你可以使用shared_preferences插件来实现类似Android原生开发中的SharedPreferences功能,用于在应用程序中保存和检索持久化的键值对。具体使用首先,在你的Fl......
  • 【杂题乱写】12 月北京省选 DP 专题训练
    有一部分题目是模板题,就不放了。D.Luogu-P5336THUSC2016成绩单考虑区间DP,由于操作的特殊性,我们需要设计含有区间最值的状态,设\(f_{l,r,i,j}\)表示区间\([l,r]\)中的所有数只保留值域\([i,j]\)中的最小代价,\(g_{l,r}\)为将区间\([l,r]\)的所有数都删去的最小代价。......
  • 【杂题乱写】12 月北京省选 DP 专题训练
    有一部分题目是模板题,就不放了。D.Luogu-P5336THUSC2016成绩单考虑区间DP,由于操作的特殊性,我们需要设计含有区间最值的状态,设\(f_{l,r,i,j}\)表示区间\([l,r]\)中的所有数只保留值域\([i,j]\)中的最小代价,\(g_{l,r}\)为将区间\([l,r]\)的所有数都删去的最小代价。......