题面

hdu6875

给 n*n 的平面, 每个点有权值

求把一些点涂黑,要求黑点不共边,且所有白点能形成一条回路

求黑点权值和最大是多少

题解

大家都能一眼看出来是典型的插头dp了

Luogu P5056 【模板】插头dp

没错,确实就是插头dp的入门题型,稍加变形,题解也就一句话

插头dp,在求哈密尔顿回路的基础上对每个格子加上一个状态表示是否为黑格即可

前置

做这道题的前提是你把上述模板题搞懂

那么就在模板题的基础上讲,按照此人题解

定义

  • state 为当前轮廓线的二进制状态
  • b1,b2 分别表示右插头和下插头
  • 0表示无插头,1表示左端点,2表示右端点, 3表示涂黑(增加的状态)

其他转移其实和模板题一样,不同的地方就是涂黑的情况和结束情况

涂黑情况

因为限制黑格不能上下左右相邻,所以当且仅当右插头和下插头都为0时才能涂黑

小技巧:特判涂黑之后,使3(涂黑)和0(无插头)等价,之后就真的一模一样不用改了

结束情况

由于黑格不能上下左右相邻,所以不可能扫描到一半终止(下面全黑)

只可能有两种情况

  • 能在最后一格闭合回路(b1==1 && b2 == 2)
  • 最后一格涂黑,在倒数第二格闭合回路

特判即可,注意最后一格涂黑的前提是倒数第二行最后一格不涂黑

还有一点

模板题求的是方案数,所以 dp 是各种情况相加

这题求的是最值,那么,那么就取最值呗

代码

另附上鄙人板子题代码

总结

这题确实感觉就是很基础的插头dp题型,我是恰好暑假开始的时候才学了插头dp,有幸拿了一血

但赛场上这题惨不忍睹,最后只有三个队伍过了,还wa上加wa(我1a1b感到无比自豪)

可能插头dp确实不简单(实不相瞒我洛谷那道入门模板题肝了起码一天吧)

另一方面可能插头dp的题并不常见,甚至罕见,人生能有一次这样的高光时刻可遇而不可求,感谢出题人XP