临时学习插头 DP(
考虑将已有操作转化为下列三种操作: 1. 对于一个格子,不改变,需要花费 0 次魔法; 2. 对于一个格子,单独翻转它,需要花费 2 次魔法; 3. 对于一个格子,翻转它上下左右的格子,需要花费 1 次魔法。
注意到对于第三种操作,我们实际上并不关心这个格子具体是什么颜色,因为无论如何都能翻成白色。
设 fi,j,S 表示目前转移到 (i,j),(i−1,j),(i−1,j+1),…,(i−1,m),(i,1),(i,2),…,(i,j−1) 这 m 个格子的状态为 S 的最少次数。
转移时考虑一下上面的格子和左边的格子即可,注意上面的格子必须翻成白色,因为此后无法再改变上面的格子。
代码:
1 |
|