插头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 神奇游乐园
题目描述
输入格式
输出格式
这道题与T2类似,只是不需覆盖满,仍要特别注意1-2合并的情况
T4标识设计
题目描述
设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)的情况下更新答案