用(1,1)和[2,2]填充3×4矩阵的一个问题求解方法
有一个 3×4 的全 0 矩阵 A,只允许用行向量 (1,1) 替换 A 中的 (0,0),或用列向量 [2,2] 替换 A 中的 [0,0]。当 A 中的 0 全部被替换成了 1 或 2,就说得到一个完全替换矩阵。求一共会有多少个不同的完全替换矩阵。
分析和解:用 aij 表示 A 的第 i 行和第 j 列相交位置上的元素。当 a11 = 1 时,由题设知必有 a12 = 1;同样,当
a11 = 2 时,必有 a21 = 2,此时又有 a31 = 1,a32 = 1。于是有如下的二叉树:
A = 0000 0000 0000 / \ A1 = 1100 2000 = A2 0000 2000
0000 1100
由 A 分裂出两个矩阵 A1 和 A2。同样,A1 和 A2 也可以继续分裂。当分裂出的某个矩阵没有 0 元素时,就得到符合题设的一个完全替换矩阵,在这棵二叉树上对应为一片叶子。因此,本题的求解就等同于计算这棵二叉树上一共有几片叶子。
先看 A1 的分裂情形,当 a13 = 2 时,a23 = 2,此时又有 a14 = a24 = 2,继而又有 a33 = a34 = 1,即有:
A1 = 1100 0000 0000 / \ A3 = 1111 1122 = A4 0000 0022 0000 0011
A4 再分裂,显然会得到两片叶子,即:
A4 = 1122 0022 0011 / \ L1 = 1122 1122 = L2 1122 2222 1111 2211
记为 leaves(A4) = 2。再看 A3 的分裂情况,会有:
A3 = 1111 0000 0000 / \ A5 = 1111 1111 = A6 1100 2000 1100 2000
同样有 leaves(A5) = 2。继续看 A6 的分裂:
A6 = 1111 2000 2000 / \ 1111 1111 = A7 2112 2200 2112 2200
A6 的左枝已经是叶子,右枝 A7 显然有两片叶子。于是:
leaves(A6) = 1 + leaves(A7) = 3
leaves(A3) = leaves(A5) + leaves(A6) = 2 + 3 = 5
leaves(A1) = leaves(A3) + leaves(A4) = 5 + 2 = 7
考察 A2 的分裂情况:
A2 = 2000 2000 1100 / \ 2112 2200 = A8 2112 2200 1111 1100
A2 的左枝已经是叶子,右枝 A8 继续分裂:
A8 = 2200 2200 1100 / \ A9 = 2211 2222
2200 2222 1100 1111
A8 的右枝已经是叶子,左枝 A9 显然有两片叶子。于是:
leaves(A8) = leaves(A9) + 1 = 3
leaves(A2) = 1 + leaves(A8) = 4
leaves(A) = leaves(A1) + leaves(A2) = 7 + 4 = 11,即一共有 11 种不同的完全替换矩阵。
附言:
此题由 walls 老师提供的一个题等价变换而来,原题为:
用若干张 1×2 的长方形纸片去覆盖一个 3×4 的长方形,使得这些纸片恰好覆盖住该长方形。求有多少种方法。