P1228 地毯填补问题题解
作者:互联网
仔细读题,发现了一些明显的提示信息“四四方方”,"\(2^k\times 2^k\)" 等字样,很显然,这是暗示我们此题不必使用\(dfs\)深搜,可以使用分治+递归的办法。
四种地毯的形状:
首先考虑\(2\times 2\)的情况。假设这个特殊点在\((2,2)\),那么很明显正确的填法是这样的:
那么接下来就要扩大到\(4 \times 4\)了:
这时候,另外三个\(2\times 2\)的未上色格子就没有特殊点了,也就没法像一开始的\(2\times 2\)的格子做。那么可不可以给每个\(2\times 2\)的格子都增加一个特殊点呢?
答案很明显是可以的。只要在四个\(2\times 2\)的格子的正中间旁边的\(3\)个白色格子都填上同一种颜色,然后再分别处理三个\(2\times 2\)的格子就可以!
那么再分别处理三个\(2\times 2\)格子,得到
那么同理,当我们扩充到\(8\times 8\)的格子时候,也用同样的方法,现将中间点旁边的白点标记为特殊点。
然后同理。。。
那么就可以推出\(2^{10}\)大小的答案啦!
那么,如果要我们求\(2^{10}\)大小的答案,那么就首先找到它的中点,判断特殊点在那边,然后就往那边递归,就变成\(2^9\times 2^9\) 了,之后一直递归下去直到变成\(2\times 2\),然后就像上面说的一样慢慢染色输出啦!
既然思路已基本确定,要使用递归+分治的思路,那么递归的两个问题需要回答:
1、大问题和小问题需要一致,只是参数不同。
大问题与小问题基本一致,那么这个比较容易,就是\(2^k \times 2^k\)是大问题,需要把它一分为四,分别讨论子个子问题,就应该可以。
2、递归的出口是什么?
肯定要思考最小情况,比如\(1\)个的方格,这时就应该是公主所在的位置,也可以是\(4\)个的方格,这时一个是公主,其它三个是一个\(L\)型的地毯。
标签:那么,递归,格子,题解,times,问题,特殊,填补,P1228 来源: https://www.cnblogs.com/littlehb/p/15033104.html