用(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 的长方形,使得这些纸片恰好覆盖住该长方形。求有多少种方法。

 

posted on 2021-10-12 23:56  readalps  阅读(159)  评论(0编辑  收藏  举报

导航