可以用動態歸劃(dynamic programming)來做
先考慮4個A(美國), 4個B(台灣), 4個C(日本)排成一列且同字不相臨的問題
令 w[x,y,z,c] (x,y,z = 0 ~ 4, c = A or B or C)
為 x 個A, y個B, z個C 排成一列且最後一個字母為c 同字不相臨的方法數
例如 w[3,2,2,A] 就是3個A, 2個B, 2個C排成一列且最後一個字母為A 同字不相臨的方法數
我們的問題就是要求 w[4,4,4,A] + w[4,4,4,B] + w[4,4,4,C]. 但跟據對稱,
w[4,4,4,A] = w[4,4,4,B] = w[4,4,4,C]. 所以 3* w[4,4,4,A] 就是答案.
顯然的, 有關係式
w[x,y,z,A] = w[x-1,y,z,B] + w[x-1,y,z,C]
w[x,y,z,B] = w[x,y-1,z,C] + w[x,y-1,z,A]
以及 w[x,y,z,C] = w[x,y,z-1,A] + w[x,y,z-1,B] 成立(為什麼?)
還有邊界條件 w[0,k+1,k,B] = w[0,k,k,B] = 1(為什麼? 還有哪些對稱的式子?)
有了這些工具以後, 就可以開始著手算w[4,4,4,A],
先算 w[1,1,1,A] w[1,1,2,A] w[1,1,2,B] w[1,1,3,A] .... w[1,1,4,B],
w[1,2,2,A] w[1,2,2,B] ......等等 一路算上去 過程中會發現算出的值稍後
立即會用到 所以得保留下來 不要立即擦掉
經過約一張A4大小的計算可以得到 w[4,4,4,A] = 364, 所以最後答案就是3 * 364 * 4!*4!*4!