插头Dp总结

T1 HDU1693:Eat the Trees

题目大意:给出n*m的方格,有些格子不能铺线,其它格子必须铺,可以形成多个闭合回路。问有多少种铺法?

插头Dp板子题,题目要求可以是多个回路,

只需要两个状态,代表是否有插头即可

$plug_1$ $plug_2$

0     0     新建一个插头插向两边  

0     1     转/不转弯

1     0     同上

1     1     合并插头


T2 Ural 1519 Formula 1

题目大意:一个 m * n 的棋盘,有的格子存在障碍,求经过所有非障碍格子的哈密顿回路个数

与T1不同的是必须是一个闭合回路

类似于括号匹配,两个插头代表是左右

$plug_1$ $plug_2$

0     0     新建一个插头插向两边 

0     1     转/不转弯

0     2     同上

1     0     同上

1     1     合并插头,并且把$plug_2$的右插头改为左插头

1     2     注意这种情况一定是一对插头碰到了一起,直接判断是不是最后一个方块统计答案或者弃掉

2     0    转/不转弯

2     1    直接合并

2     2     合并插头,并把$plug_1$的左插头改为左插头改为右插头


 T3 神奇游乐园

题目描述

经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回。在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼。往下仔细一看,才发现这是一个游乐场,专为旅途中疲惫的人设计。娱乐场可以看成是一块大小为n×m的区域,且这个n×m的区域被分成n×m个小格子,每个小格子中就有一个娱乐项目。然而,小P并不喜欢其中的所有娱乐项目,于是,他给每个项目一个满意度。满意度为正时表示小P喜欢这个项目,值越大表示越喜欢。为负时表示他不喜欢,这个负数的绝对值越大表示他越不喜欢。为0时表示他对这个项目没有喜恶。小P决定将飞艇停在某个小格中,然后每步他可以移动到相邻的上下左右四个格子的某个格子中。小P希望找一条路径,从飞艇所在格出发,最后又回到这个格子。小P有一个习惯,从不喜欢浪费时间。因此,他希望经过每个格子都是有意义的:他到一个地方后,就一定要感受以下那里的惊险和刺激,不管自己是不是喜欢那里的娱乐项目。而且,除了飞艇所在格,其他的格子他不愿意经过两次。小P希望自己至少要经过四个格子。在满足这些条件的情况下,小P希望自己玩过的娱乐项目的满意度之和最高。你能帮他找到这个最高的满意度之和吗?

输入格式

第一行为两个正整数n和m,表示游乐场的大小为n×m。
n和m满足:2<=n<=100,2<=m<=6。
接下来的n行,每行有m个整数,第i行第j列表示游乐场的第i行第j列的小格子中的娱乐项目的满意度,满意度的范围是[-1000,1000]。同一行的两个整数之间用空格隔开。

输出格式

输出文件中仅一行为一个整数,表示最高的满意度之和。

 这道题与T2类似,只是不需覆盖满,仍要特别注意1-2合并的情况


T4标识设计

题目描述

一家缩写为 LLL 的公司正在设计 logo,他们的初步方案是在一张方格上放置三个 L 形的图案以及一些额外的装饰性图形。例如:

image (灰色区域表示装饰性图形)

三个 L 图案和装饰性图形均放置在方格之中,且必须占满方格,「L」的横竖笔画长短均可,但长度必须大于零(即不能退化为一条线段)。另外,为了使 L 图形醒目且容易识别,设计师规定三个 L 形图案之间不能有重叠或交叉的部分。当然,L 形图案也不能穿过装饰图形或与之重叠。

现在设计师已经确定了所有装饰性图形的位置,希望你计算一下放置不同的 L 形图案总共可以设计出多少个 logo。

设dp[i][j][k][l][r]代表到了第i行第j列已经设计了k个'L'型,斜着有没有插头,其他插头的分布状态是r(已经预处理)的方案数  

直接轮廓线Dp即可,分类讨论比较简单不再描述


T5ParkII

题目大意:要求找一条路径,使得每个点最多经过一次,并且点权值之和最大。

很不错的一道题,插头的定义能对前面的题有一个更深的理解

这道题与T3区别在于不需要是一条回路,

这样便会出现一些在当前状态下没有与其匹配的插头,

我们不妨称其为独立插头,用3来表示,

当然当前状态下可能会出现2个独立插头,它们只是还没有会合而已。

$plug_1$ $plug_2$

0  0  建立一对(1,2)/某个方向建立3

0  1  转/不转/停止并且2改3

0  2  转/不转/停止并且1改3

0  3  转/不转

1  0  同0,1

1  1  右2改1

1  2  (只剩一对1,2)则更新ans

1  3  左2改3

2  0  同0,2

2  1  合并

2  2  左1改2

2  3  左1改3

3  0  转/不转/(只剩一个3)则更新ans

3  1  右2改3

3  2  右1改3

3  3  (只剩一对3,3)则更新ans

插头dp的ans更新一般都比较神奇,可能不局限于最后的某一个状态,而是在dp的过程中对于某些可以终止的状态进行统计

比如说这个题,可以在(只剩一对3,3),(只剩一对1,2)(只剩一个3)的情况下更新答案

原文地址:https://www.cnblogs.com/AthosD/p/12013583.html