首页 > 其他分享 >20241016 模板清理

20241016 模板清理

时间:2024-10-16 21:43:47浏览次数:1  
标签:20241016 清理 第一条 DP ans 第二条 模板 转移 dp

区间DP - 回文字串

记 \(f[i][j]\) 表示把 \(s[i \sim j]\) 变成回文,最少补几个,从 \(f[i][j - 1], f[i + 1][j], f[i + 1][j - 1]\) 三种情况转移过来即可。感性理解一下这样的状态定义是有最优子结构的。

区间DP - 合唱队

肯定可以区间 \(dp\),再注意到状态的转移和上一步有关,所以记 \(f[i][j][0/1]\) 表示 \(H[i \sim j]\) 的方案数,其中 \(0\) 表示最新的一个人插进了队形左端(即 \(H[i]\)),\(1\) 就是右端(即 \(H[j]\)),根据大小关系转移即可。

高维DP - 三倍经验

唯一值得注意的是此题可以倒推,并且倒推之后的答案统计是 \(O(1)\) 的。正推的答案统计是 \(O(n)\) 的。

高维DP - 方格取数

一个很朴素的想法是把两条路的位置同时都实时记录下来,这样就好转移了,事实证明是可以的。

记 \(f[i][j][p][q]\) 表示第一条路走到了 \((i, j)\),第二条路走到了 \((p, q)\) 的最大权值和。它可以转移到四种情况,即:

  • 第一条路 往右走, 第二条路 往右走。
  • 第一条路 往右走, 第二条路 往下走。
  • 第一条路 往下走, 第二条路 往右走。
  • 第一条路 往下走, 第二条路 往下走。

分 点重合/不重合 两种情况赋予转移代价,套上 \(BFS\), 直接转移就是 \(O(n^4)\) 的,当然需要标记一下每个点是否访问过。

考虑优化成 \(O(n^3)\),注意上面的方法两条路走的步数始终相同。记 \(f[i][j][k]\) 表示两条路都走了 \(i\) 步,第一条路处于第 \(j\) 行,第二条路处于第 \(k\) 行,最大权值和。起点是 \((1, 1)\),因此 \((x - 1) + (y - 1) = i\), 则 \(y = i - x + 2\)。最后特判一下只走了 \(1\) 步的情况就行,因为不满足这个式子。

环形DP - 石子合并

学到一个 \(trick\) : 区间相关的环形问题,可以把序列复制一遍接在后面,然后只推到 \(len = n\) 就可以了,最后取 \(\max_{i \in (1, n + 1)} f[i][i + n - 1]\)。这样比 \(n\) 次区间 \(dp\) 快很多,因为不同的断点位置下的区间可以使用相同的一段很小的区间。

环形DP - 环上最大子段和

最大子段和 + 前后缀max 连一下就可以。

树型DP - 没有上司的晚会

一个最大独立集问题,记 \(f[u][0/1]\) 表示选 \(u\) 或者不选 \(u\),对于一个儿子 \(v\),有转移:

\[f[u][0] = \sum\min(f[v][0], f[v][1]) \]

\[f[u][1] = \sum[v][0] + val[u] \]

树型DP - 二叉苹果树

树上背包,记得给 \((u, v)\) 留一条边就可以了,并且一定要连这条边,不然转移没有意义。

状态压缩BFS - 关灯问题

只有 \(n\) 能进行状态压缩。一开始的想法是记 \(f[i][S]\) 表示前 \(i\) 个操作,强制选 \(i\),然后得到了 \(S\) 这个集合,最少操作数。然后还“机智”地发现开个 \(vector[i]\) 表示 \(f[i][?]\) 有哪些更新出来了。

然而无济于事,因为此题 \(dp\) 的顺序并不是简单的递推(会有后效性),因此采用记忆化 \(BFS\) 进行实现。

答案: \(min(f[i][0])\)。

初始化: \(f[0][(1 << n) - 1] = 0\),其他初始化为 \(inf\)。

式子就是 \(f[i][S] = min(f[j][T] + 1, f[i][S])\), \(T\) 的话就照着题目要求根据 \(S\) 推出来。

时间复杂度为 \(O(2^nmn)\)。

最后发现其实当前具体在哪个操作并不重要(下一步转移都是向全部操作),所以可以优化成一维。并且由于广搜良好的性质找到一个 \(f[0]\) 就直接输出就可以!

状态压缩DP技巧 - A Simple Task 「CF11D」

一开始想成树形dp了,然后发现非常的难写,因为点之间有各种路径计数,很难补充不漏。每次扩展和前一个状态的联系也不是很大。

题解是一种巧妙的状压dp。显然可以对已选点集进行状压。先考虑如何统计环的数量,对于 \(i \to j\) 的一条简单路径,若路径外一点 \(k\) 同时和 \(i\),\(j\) 有连边,那么就成了一个环。基于此,我们可以转化成利用 \(dp\) 统计简单路径的数量,而统计答案时在另找一个点连环。(状压没想到,但这一步转化想到了……)

这样定义出来的状态是 \(f[S][i][j]\),表示选择的点集为 \(S\), \(i \to j\) 的简单路径的数量。转移比较好写。空间复杂度会达到 \(2^{19} \times 19^2 = 189,267,968\),存不下,时间应该还要再乘一个 \(19\), 也爆掉了。

考虑怎么优化时空。注意到后两维其实都是我们主动加的限制,但仅仅是为了统计答案而同时维护这两维显得有些不划算。能不能利用好 \(S\) 中包含 \(i, j\) 的性质进行一些优化呢?

考虑强制规定 \(lowbit(S)\) 那一位是起点,\(i\) 作为终点,这样只要遇到一个满足 \((1 << i) = lowbit(S)\) 的 \(i\), 就统计答案。

状态: \(f[S][i]\),意义如上。

答案: \(ans = \sum_{lowbit(S) = 2^i}f[S][i]\)。最后记得 \(ans = (ans - m)/2\), 因为会误算 一条边和两个端点的“假环”

初始化: \(f[2^i][i] = 1,i \in [0, n - 1]\)。

转移:

\[\begin{align}ans &+= f[S][i] &\text{lowbit(S) = (1 << j)} \\f[S | (1 << j)][j] & += f[S][i] & \text{lowbit(S) < (1 << j)}\end{align} \]

标签:20241016,清理,第一条,DP,ans,第二条,模板,转移,dp
From: https://www.cnblogs.com/superl61/p/18471008

相关文章

  • 【模板】最近公共祖先(LCA)倍增
     P3379P3379【模板】最近公共祖先(LCA)#【模板】最近公共祖先(LCA)##题目描述如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。##输入格式第一行包含三个正整数$N,M,S$,分别表示树的结点个数、询问的个数和树根结点的序号。接下来$N-1$行每行包含两个正......
  • [20241016]Oracle C functions annotations补充.txt
    [20241016]OracleCfunctionsannotations补充.txt--//网站orafun.info可以查询oraclecfunctions.CreatedbyFritsHooglandwithalittlehelpfromKamilStawiarski.--//可以通过它了解oracle内部C函数.实际上可以直接下载相关文件,在本地使用.https://gitlab.com/Frits......
  • 【朝花夕拾】免费个人网页搭建:免费托管、CDN加速、个人域名、现代化网页模板一网打尽
    现代化网页设计的免费宝藏:GitHubPages+CodePen+Cloudflare+US.KG前言在当今数字化时代,个人和企业越来越重视在线形象的建立。GitHubPages提供了一个免费且便捷的平台,允许用户托管静态网站。然而,GitHubPages默认的域名可能不够个性化,因此,许多用户希望将自定义域名绑定......
  • Obsidian之模板的简单使用
    前言:在使用Obsidian时经常对每次新建的文件输入相同的内容是否有更好的解决方法呢,以下是我使用Obsidian模板的一些经验总结用到的插件Templaterquickaddbanner在开始前确保已经安装了以上的插件首先简单的介绍下Templater的功能自定义指定文件夹的新建文件的模板配合......
  • 20241016 模拟赛总结
    期望得分:100+100+55(?)+0=255实际得分:100+100+0+0=200迷迷糊糊睡了好一会才起来打……感觉打的还行,除了T3时间太紧了,有的错误没检查出来挂分了。。T1简单线性DP。\(f_i\)表示前i个数的答案,\(g_i\)有点抽象,先假设当前在\(p\),\(a_p=i\),\(g_i\)表示的是如果\(p\)......
  • 公司网站的logo如何修改?ab网站模板怎么修改?
    修改公司网站的Logo备份当前Logo在进行任何更改之前,请确保备份现有的Logo文件,以防需要恢复。准备新Logo确保新Logo符合网站的设计风格和尺寸要求。通常推荐使用矢量图形(如SVG)或高分辨率的PNG文件以保证不同设备上的显示效果。登录网站后台使用管理员账号登录网......
  • 公司网站修改?网站主页修改方案模板?
    目标概述明确修改目的(如提升品牌形象、增加转化率)。设定具体可衡量的目标。现状分析当前主页存在的问题。用户反馈总结。设计方案新主页布局草图。颜色搭配与字体选择。关键元素位置调整(如LOGO、导航栏、CTA按钮)。技术实现采用的技术栈(如HTML5,CSS3,J......
  • 公司网站的首页怎么修改?修改网站模板?
    要修改公司网站的首页或更换模板,通常可以按照以下步骤操作:备份现有网站:在进行任何更改之前,确保备份当前的网站数据和文件,以防更新过程中出现错误。选择新的模板:如果使用的是CMS(内容管理系统)如WordPress、Joomla等,可以通过后台管理界面选择新的模板。对于自定义开发的......
  • 网站后台修改模板?公司网站轮播如何修改?
    网站后台修改模板登录后台:使用管理员账号登录网站后台。导航至模板管理:在后台主界面中找到“模板管理”、“主题设置”或类似的选项。选择模板:从模板列表中选择当前使用的模板或想要切换的新模板。编辑模板:进入模板编辑页面,可以对模板的样式、布局等进行调整。......
  • 网站模板修改地址不详?模板网站不能修改吗?
    网站模板修改地址不详查阅文档查看网站后台提供的帮助文档或指南,通常会有详细的说明介绍如何修改模板。联系客服如果找不到相关信息,可以尝试联系网站的技术支持或客服,询问具体的修改路径和方法。探索后台在后台管理系统中仔细探索,尝试找到与模板相关的设置项,如“......