插头DP/轮廓线DP

题解 P5056 【【模板】插头dp】- GNAQ

(\(\uparrow\) 学习资料,大部分贺的,有一些些的改动与自己的补充)

什么是插头 DP

插头 DP 是一类用状压 DP 来处理连通性问题的 DP 方法。

常见的类型:棋盘插头 DP、连通性问题(回路问题,路径问题,生成树问题等)……

插头 DP 的大致思路

划分状态

插头 DP 本质上式状压 DP!

一般设 \(dp(i,state,\dots)\) 表示在位置 \(i\),状态为 \(state\) 的方案。

状态 \(state\) 是求解的轮廓线,就是一个将已经做出决策的点与没有做出决策的分割线。

在棋盘问题中,我们选择逐格转移,因此轮廓线就是上面以及覆盖的棋盘与下面没有覆盖的棋盘的分割线。

那么插头又是什么呢?一个格子和周围四个格子有相接,那么这个各自就有四个可能的插头。插头表示两个格子之间的联通情况。

记录状态

最小表示法

???还不是很懂,大概是一个连通块一个连通块标记??

括号表示法

将插头之间的联通情况的联通情况用括号表示,两个联通的插头左边的表示为 \((\),右边的表示为 \()\),没有的表示 \(\#\)

之后用 \(0\) 表示 \(\#\),用 \(1\) 表示 \((\),用 \(2\) 表示 \()\)

状态的编码

最简单的方法就是表示为一个 \(n+1\) 位的 \(p\) 进制,用进制上的加减压缩。

最好的方式是将 \(p\) 变为 \(2\) 的幂次,如二进制、四进制等。可以将三进制用四进制表示等等。

转移状态

我们的目标通常是用一定表示方法将这根轮廓线表示出来并且分类讨论实现各种转移。

一般来说,转移可以:

  1. 新建一个状态。

  2. 合并一个状态。

  3. 保持原来的状态,即移动一个状态。

\(\bigstar\texttt{important}\):记得在转移的时候判断是否到达一个合法的状态!!记得在取出一个状态的时候判断这个状态是否合法!!!

状态记录的优化

有时候发现状态超级大,无法记录怎么办?而 map 实在是太慢啦!

那就用哈希表吧!

即,我们将状态根据一个随机的模数分为很多种类,分别建立链表挂链表打查询。

访问状态的时候可以直接根据链式前向星直接拉出所有合法状态,转移的时候可以高效加入。

例题

P5056 【模板】插头dp

模板题!(但只是插头DP的入门题)

记得在转移的时候判断这个转移的合法性!!比如这个轮廓线能不能向右走、向下走(是不是墙)。

再一次拉出来的时候还要再判断一次。

几乎一模一样:P3190 [HNOI2007]神奇游乐园

P3272 [SCOI2011]地板

这里假设状态中这一位为 \(1\) 表示这个插头指向的格子为 L 形的一只手,另一只手已经完成,谢下一位必选;\(2\) 表示插头指向的格子为 L 形的第一只手,需要转弯。

这样继续四进制转移即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

周末狂欢赛4(1-02E. JM的西伯利亚特快专递,寿司晚宴,荷马史诗)

文章目录T1:1-02E. JM的西伯利亚特快专递题目题解codeT2:寿司晚宴题目题解codeT3:荷马史诗题目题解codeT1:1-02E. JM的西伯利亚特快专递 题目 今天JM收到了一份来自西伯利亚的特快专递,里面装了一个字符串 s &#x…

.NET Core容器化开发系列(一)——Docker里面跑个.NET Core

前言博客园中已经有很多如何在Docker里面运行ASP.NET Core的介绍了。本篇主要介绍一些细节,帮助初学的朋友更加深入地理解如何在Docker中运行ASP.NET Core。安装DockerDocker现支持在主流Linux、Windows和macOS上安装,官方的安装文档请参考docker docs。…

YBTOJ:卖猪问题(网络流)

文章目录题目描述数据范围解析代码题目描述 尼克在一家养猪场工作,这家养猪场共有MMM间锁起来的猪舍,由于猪舍的钥匙都给了客户,所以尼克没有办法打开这些猪舍。有NNN个客户从早上开始一个接一个来购买生猪,他们到达后首先用手中…

P4370-[Code+#4]组合数问题2【数学,堆】

正题 题目链接:https://www.luogu.com.cn/problem/P4370 题目大意 求满足m≤n≤am\leq n\leq am≤n≤a的情况下,前kkk大的(nm)\binom{n}{m}(mn​)的和。 1≤n≤106,1≤k≤1051\leq n\leq 10^6,1\leq k\leq 10^51≤n≤106,1≤k≤105 解题思路 首先想到的是(nm)>…

【做题记录】[SCOI2009]围豆豆

[SCOI2009]围豆豆 \(n\times m(n,m\le 10)\) 的网格中有 \(d\) 个球 \((d\le 9)\),要求在网格中选定一个起点开始做一个欧拉回路,路径的价值为路径完全包住的球的价值之和减去路径长度,求所有路径中的价值最大值。 有价值与步数的两个限制&am…

Codeforces Round #695(Div. 2)

Codeforces Round #695 (Div. 2) 1467A Wizard of Orz 1467B Hills And Valleys 1467C Three Bags 1467D Sum of Paths 1467E Distinctive Roots in a Tree 1468A LaIS

YBTOJ危桥通行洛谷P3163:危桥通行(网络流)

文章目录题目描述解析代码题目描述 Alice 和 Bob 居住在一个由 NN 座岛屿组成的国家,岛屿被编号为 00 到 N-1N−1。某些岛屿之间有桥相连,桥上的道路是双向的,但一次只能供一人通行。其中一些桥由于年久失修成为危桥,最多只能通行…

中小研发团队架构实践之生产环境诊断工具WinDbg

生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器。调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具,Dump文件类似于飞机的黑匣子,记录着生产环境程序运行的状态。本文主要介绍了调试工具W…

多项式的基础操作(逆元/除法/取模/对数ln/开根sqrt/指数exp/快速幂)带模板+luogu全套例题

文章目录多项式的逆元理论推导模板例题:[luogu P4238]【模板】多项式乘法逆题目code多项式的除法/取模理论推导多项式牛顿迭代法模板例题:[luoguP4512]【模板】多项式除法题目code多项式对数ln理论推导模板例题题目code多项式开根sqrt理论推导模板例题题…

P1232-[NOI2013]树的计数【思维】

正题 题目链接:https://www.luogu.com.cn/problem/P1232 题目大意 给出nnn个点的树的dfsdfsdfs序和bfsbfsbfs序,求所有合法的树的平均深度。 1≤n≤21051\leq n\leq 2\times 10^51≤n≤2105 解题思路 bfsbfsbfs应该是最好开始考虑的,因为bfsbfsbfs序的…

Wizard of Orz CodeForces - 1467A

Wizard of Orz CodeForces - 1467A 题意: 有个长度为n初始状态下各元素均为0的数组,没过一秒数组中所有元素都会1,如果是9则会变成0,即0-9不断循环。现在你能够在开始后的任意时间点选取任意一个位置,改位置上的数字…

从软件工程的角度解读任正非的新年公开信

昨天被任正非的那封《全面提升软件工程能力与实践,打造可信的高质量产品》的公开信刷屏了,作为一个软件工程专业科班出身的软件开发从业者,自然是引起了我(宝玉xp)的好奇,仔细阅读之下确实让我大吃一惊&…

YBTOJ:矛盾指数(网络流-最大权闭合图)

文章目录题目描述解析代码网络流要大胆建图 题目描述 公司内部共nnn个员工,员工之间可能有矛盾。若员工uuu和员工vvv有矛盾,用边(u,v)(u,v)(u,v)表示,共mmm个矛盾。 现在公司决定裁员,使得被裁人员间的矛盾指数最高。矛盾指数定…

行列式、LGV、矩阵树学习笔记

前置知识:矩阵、高斯消元 行列式 行列式定义 \[\text{det(A)}\sum_{p}{(-1)^{\mathrm{sgn}(p)}\prod{A_{i,p_i}}} \]其中 \(\text{sgn}(p)\) 表示排列 \(p\) 的逆序对个数。 行列式性质 进行一次矩阵转职,行列式不变。(易证)行列式任意一行按比例扩大&am…

P5008-[yLOI2018]锦鲤抄【tarjan】

正题 题目链接:https://www.luogu.com.cn/problem/P5008 题目大意 给出nnn个点mmm条边的一张有向无环图,你每次可以选择一个有入度的点获取其点权然后删除这个点。求能取kkk次的情况下最大能获得的权值和。 1≤n≤51054,1≤m≤210641\leq n\leq 5\times 10^54,1\l…

Hills And Valleys CodeForces - 1467B

Hills And Valleys CodeForces - 1467B 题意: 修改数列中的 一个 数字 使得峰(波峰、波谷)的数量最少 题解: 修改一个数,最多只能影响左右两个数,所能减少的峰的数量为1,2,3三种 分类讨论,对于当前位置…

HttpClient在.NET Core中的正确打开方式

问题来源长期以来,.NET开发者都通过下面的方式发送http请求:using (var httpClient new HttpClient()){var response await httpClient.GetAsync(uri);//do something with response}这段代码理论上来说遵守了C#的最佳实践,HttpClient是IDi…

YBTOJ:炮塔攻击(网络流)

题目描述 小明最近在玩一款很好玩的游戏,游戏规则是这样的: 有一个n∗mn*mn∗m的地图,地图上的每一个位置要么是空地,要么是炮塔,要么是一些敌人,小明需要操纵炮塔攻击敌人。 攻击方法是:对于…

[CQOI]九连环(FFT优化+高精)

文章目录题目题解code题目 九连环是一种源于中国的传统智力游戏。 如图所示,九个的圆环套在一把“剑”上,并且互相牵连。游戏的目标是把九个圆环全部从“剑”上卸下。 圆环的装卸需要遵守两个规则 1.第一个(最右边)环…

牛客挑战赛53G-同源数组(Easy Version)【NTT】

正题 题目链接:https://ac.nowcoder.com/acm/contest/11193/G 题目大意 给出nnn个长度为mmm的数组,然后你每次可以进行差分(不会改变数组长度那种)和前缀和。 如果两个数组可以在模998244353998244353998244353意义下操作成同一个数组&…