一、题目
题目描述
小 C C C 喜欢作画, 尤其喜欢仅使用黑白两色作画遗像。
画布可以看成 r × c r\times c r×c 的单元格矩阵。现在小 C C C 构思好了他的画, 准备动笔。初始时画布是全白的,他每一次下笔可以将一个四连通的部分涂成黑色或白色。相邻格子定义为有公共边的格子。称 S S S 为四连通,当且仅当 S S S 中任意两个格子之间都存在一条 S S S 内路径,满足只在相邻格子间移动。
你需要告诉他,最少需要下笔多少次才能完成画作。
数据范围与提示
max ( r , c ) ≤ 50 \max(r,c)\le 50 max(r,c)≤50
二、解法
通过样例不难猜到:存在一种最优方案使得每次操作的区域是上一次的子集且颜色与上一次相反。
证明分三种情况讨论,用归纳法, S S S为所有操作范围的并, T T T为下一次的操作范围。
第一种情况,
S
S
S 和
T
T
T 不交的时候,如何说明?看图:
我们先把第一次操作的扩张到全部(包含
1
1
1)的操作范围,红色(代表涂白)的部分扩张
2
,
1
2,1
2,1,最里面的黑色扩张
3
,
2
3,2
3,2,那么现在
3
3
3被多涂黑了,我们再使用一次操作将其涂白即可,证明了步数最优。
到这里我想提醒一下,我们的中心思想是扩张,结合这道题的性质就不难想到我们为什么要这么做(收缩是危险的)
第二种情况,
T
T
T 被
S
S
S 包含,这种情况又下设两种情况。
c
a
s
e
1
\tt case 1
case1 是
T
T
T落在某个完整区域内,其实外层的可以忽略,那么就归约到了第一种情况。
c
a
s
e
2
\tt case 2
case2的做法看图:
上图表现了跨越了多个操作范围的涂黑操作(形象地说是插入),那么秉承扩张的思想,我们把第三层的范围扩张成黄色部分,最里层也扩张成黄色部分,这说明了这种插入式的操作就是浪费步数,不优。
第三种情况, S S S 和 T T T 有交,那么一定可以转化成 T T T 被 S S S 包含的情况(对第一次操作动点手脚就行了),那么归约到第二种情况。
证明了结论过后,看怎么用?第一次怎么操作是不能确定的,所以需要枚举。但这里枚举中心点就足够了,我们把同色边看做 0 0 0,异色边看做 1 1 1,那么每个中心点求出离他最远的点的距离就是答案。
nothing here