插头dp
插头dp 俗称轮廓线dp,
各种网格覆盖问题,范围允许状压解决,常用于计算方案数与联通块权值
插头是tm啥?格子与格子之间的状态
网上图很多,不挂了
说一说对各种状态的理解
已知\(b1,b2\)
当前有障碍的话,显然不能走
只讨论没有障碍,能走的情况
- \(b1 = 0,b2 =0\)
增加两个插头,要回路,因此要一个右插头一个下插头
- \(b1=0,b2=1\)
考虑向右拐,和向下直走
- \(b1=1, b2=0\)
考虑向下拐,和向右直走
- \(b1 = 1,b2=1\)
在右边找个匹配的右插头,然后把原来的两个1都干掉,在现在找到的位置把2干掉,把1重新弄上去
- \(b1=2,b2=2\)
在左边找个…
- \(b1=2,b2=1\)
考虑连上,该干啥干啥
- \(b1= 1,b2=2\)
如果不是终点不要记录答案
各种含义
dp[][x] = y, 第x次所表示的价值为y
vis[][x] = y, 第x次所表示的状态为y
cnt[x] = y, cntx这一维度表示的状态数目
hash[x] = y, x这个**位置**在HASH里对应的第y次(在当前状态下)