设网格的总格子数为 k=r×c,由题意 k≤16。
每个格子只有两种涂色选择(红色或蓝色),因此所有可能的涂色方案总数为 2k,最大仅为 216=65536,可以直接枚举所有方案,再检查每种方案是否满足条件。
核心思路如下:
0 表示红色,1 表示蓝色(反过来的设定也可,不影响结果)。有一个 r 行 c 列的矩形网格,每个格子必须被涂成红色或蓝色。 上下左右相邻且颜色相同的格子可以相互连通。由连通关系形成的极大同色连通区域称为一个“色块”。 如果一个色块包含的格子个数是奇数,则称该色块是“优美的”。 现在你需要求出:一共有多少种给网格涂色的方案,使得网格中出现的每一个色块都是优美的?
约束条件:
第一行包含两个整数 r 和 c,分别表示网格的行数和列数。
输出一个整数,表示所有色块都优美的涂色方案总数。
输入
1 2
输出
2
说明
在 1times2 的网格中,共有 22=4 种涂色方案。枚举所有方案:
2 的连通块(偶数),不合法。2 的偶数连通块,不合法。1 的连通块,都是奇数,合法。1 的连通块,合法。
因此合法方案总数为 2。输入
1 3
输出
4
说明
在 1times3 的网格中,共有 23=8 种方案。每个极大同色连通块的大小必须为奇数。 枚举所有合法方案:
3 的红色连通块,合法。3 的蓝色连通块,合法。1 的连通块,合法。1 的连通块,合法。
其他方案(如红红蓝、红蓝蓝等)均会产生大小为 2(偶数)的连通块,不合法。故答案为 4。输入
2 2
输出
10
说明
2times2 网格共 24=16 种方案。连通块大小只可能为 1、2、3 或 4,偶数大小不允许。
4(偶数),不合法。3,蓝色为 1,均为奇数。有 4 种方式选择蓝色的位置,均合法。2 的块,非法;只有红、蓝分别占据对角线(同色不相邻)时,形成四个大小为 1 的块,共 2 种方案。
所有合法方案数:4+4+2=10。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.