算法题目——多米诺骨牌问题(POJ-2663)
題目鏈接:POJ-2663
設有形狀一樣的多米諾牌,每張牌恰好覆蓋棋盤上相鄰的兩個方格,即一張多米諾牌是一張 1 行 2 列或者 2 行 1 列的牌。那么,是否能夠把 32 張多米諾牌擺放到棋盤上,使得任何兩張多米諾牌均不重疊,每張多米諾牌覆蓋兩個方格,并且棋盤上所有的方格都被覆蓋住?我們把這樣一種排列稱為棋盤被多米諾牌完美覆蓋。這是一個簡單的排列問題,同學們能夠很快構造出許多不同的完美覆蓋。但是,計算不同的完美覆蓋的總數就不是一件容易的事情了。不過,同學們 發揮自己的聰明才智,還是有可能做到的。
輸入
一次輸入可能包含多行,每一行分別給出不同的 n 值 ( 即 3 乘 n 棋盤的列數 )。當輸入 -1 的時候結束。
n 的值最大不超過 30.
輸出
針對每一行的 n 值,輸出 3 乘 n 棋盤的不同的完美覆蓋的總數。
思路:
設a[i]為N=i時的方法數.i為奇數的時候肯定為0.
如果i為偶數,a[i]可以看成a[i-2]加上兩個單位組成的,此時多出來的2單位有3種方法…
也可以看成a[i-4]加上四個單位組成的,此時這四個單位一定是連在一起的,中間不能分割,所以只有兩種放法.
同理,可看成a[i-6]加上六個單位組成的,此時這六個單位也連在一起,不能分割,只有兩種放法…
直到所有的磚塊都是連在一起的,中間不能分割,也只有兩種放法.
所以
a[i]=3a[i-2]+2(a[i-4]+a[i-6]+…+a[0]) ①
a[i-2]=3a[i-4]+2(a[i-6]+…a[0]) ②
①-②,得a[i]=4*a[i-2]-a[i-4].
參考文章
POJ 2663 Tri Tiling(完美覆蓋)
總結
以上是生活随笔為你收集整理的算法题目——多米诺骨牌问题(POJ-2663)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 促进新陈代谢的减肥药真的有用吗
- 下一篇: 算法题目——Problem A 二进制(