请您帮我解决这个问题:四:给定正整数n是6的倍数。将一个n*n方格表的每个格子染成三种颜色之一,满足...
創建於:2026年8月18日
使用 GPT-5.6 Thinking 回答 Chat01
創建於:2026年8月18日
使用 GPT-5.6 Thinking 回答 Chat01
请您帮我解决这个问题:四:给定正整数n是6的倍数。将一个nn方格表的每个格子染成三种颜色之一,满足任何两个有公共边的格子的颜色都不一样,并且三种颜色的格子数量都相同。将13或者3*1形状的矩形称为“条形”,如果一个条形中有且只有三种颜色,则称它是“好的”,问至少有多少个好的条形。
pythonfrom itertools import product def row_states(n): rows=[] for r in product(range(3), repeat=n): if all(r[j]!=r[j+1] for j in range(n-1)): rows.append(r) return rows rows=row_states(6) len(rows) 96
pythondef min_good_dp(n): rows=[] for r in product(range(3), repeat=n): if all(r[j]!=r[j+1] for j in range(n-1)): rows.append(r) target=n*n//3 compat={a:[b for b in rows if all(x!=y for x,y in zip(a,b))] for a in rows} def hg(r): return sum(r[j]!=r[j+2] for j in range(n-2)) dp={} if n==1: return None for a in rows: for b in compat[a]: cnt=tuple(a.count(k)+b.count(k) for k in range(3)) if all(x<=target for x in cnt): dp[(a,b,cnt)]=hg(a)+hg(b) for i in range(2,n): nd={} for (a,b,cnt),cost in dp
python# enumerate all proper 2x2 blocks blocks=[] for vals in product(range(3), repeat=4): mat=[vals[:2],vals[2:]] if proper_grid(mat): eps=tuple(1 if vals.count(c)==2 else 0 for c in range(3)) blocks.append((vals,eps)) viol=[] for v,e in blocks: for w,f in blocks: hd=sum(a!=b for a,b in zip(v,w)) ed=sum(a!=b for a,b in zip(e,f)) if hd<ed: viol.append((v,e,w,f,hd,ed)) break if viol: break len(blocks), viol[:1] (18, [])
答案是
下面给出一个比较完整的证明。核心是把原来的 方格按 分块。
设三种颜色为 ,并令
由于 ,所以 。
一个连续的 条形颜色依次为 。因为相邻格异色,所以
于是它是好的,当且仅当 。
换句话说:
长度为 3 的条形是好的,当且仅当它两端的颜色不同。
竖直条形同理。
把第 行配成一组,第 行配成一组,等等;列也如此。于是得到一个
的“小块棋盘”。
对一个 小块 ,定义
由于同色格不能共边,一个颜色在 小块里最多出现两次。因此一个合法小块的颜色数只能是
所以
一定是下面六种之一:
设两个 小块 水平相邻。
跨越它们公共边的 条形一共有四个。根据第 1 步,一个这样的条形好,当且仅当其左右两端——也就是 中相同相对位置的两个格子——颜色不同。
因此,跨越这条小块边界的好条形数,恰好等于 两个 图案对应位置颜色不同的格子数。
而对两个合法的 图案,有
这里右边就是两个 向量的 Hamming 距离。
简单说明一下为什么成立。右边只可能是 :
竖直相邻的小块完全同理。
因此,如果 是所有好条形的总数,那么
交换求和次序:
其中
而 表示在 小块棋盘中,一端属于 、另一端不属于 的边数。
固定一种颜色 。
设在全部 个 小块中:
于是
而这种颜色在整个棋盘里共有
个格子,所以
两式相减得到
因此
另一方面,
所以 ,从而
而 。所以对三种颜色都成立:
引理: 在 方格图中,若集合 满足
那么
证明很短。
假设反而 。
称一行为“混合行”,若这一行中既有 中的格,也有 外的格。设混合行有 行。每个混合行至少贡献一条水平边界,所以水平边界至少为 。
类似地,若混合列有 列,则竖直边界至少为 。故
因此必有非混合行和非混合列。
若既有整行属于 ,又有整行不属于 ,那么每一列从这两行之间走过去至少发生一次“进出 ”的变化,于是竖直边界至少为 ,矛盾。
所以所有非混合行状态相同;非混合列也相同。必要时用 的补集代替 ,可以假设所有非混合行、非混合列都不属于 。
于是所有属于 的格子只能位于那 个混合行和 个混合列的交叉处,因此
与条件矛盾。引理得证。
由 (3)(4),
代入 (2):
所以任何合法染色至少有
个好条形。
写
用颜色 。
前 行按下面两种行交替:
即奇数行用第一种,偶数行用第二种。
最后 行按下面两种交替:
因为 为偶数,所以两部分交界处是
下面接
对应位置也全部异色。因此整个染色满足相邻格不同色。
三种颜色数量也容易检查都为
每一行都严格两色交替,所以没有水平的好条形。
设两部分的交界在第 行与第 行之间。只有跨越这个交界的竖直 条形可能是好的:
所以恰有
个好条形。
因此最小值确实为