1. 2*N
這是一個經典的遞推問題,如果覺得無從下手,我們可以來看一個更加簡單的問題,把問題中的“3”變成“2”(即在一個2XN的長方形方格中鋪滿1X2的骨牌的方案)。這樣問題就簡單很多了
假設用f[i]表示2*i的方格一共有組成的方法數,我們知道arr[1]=1;arr[2]=2;
現在假設我們已經知道了f[i-1]和f[i-2],求arr[i],所謂f[i],不過是在2*(i-1)的格子後邊加上一格2*1的方格罷了,骨牌在這一格上橫着放,豎着放,如果前面i-1塊已經鋪好,則第i塊只有一種鋪法,就是豎着放,如果要橫着放,也只有一種鋪法,不過要求前面i-2塊已經鋪好!
因此f[i]=f[i-1]+f[i-2];
默認(i-2)不存在兩個連續豎排,因爲和(i-1)假設前面(i-1)塊已經鋪好衝突
所以可以得到遞推式f[i] = f[i-1] + f[i-2] (i >= 2),並且邊界條件f[0] = f[1] = 1。
2.3*N
首先可以明確當N等於奇數的時候,方案數一定爲0
f[i][0] = f[i-2][0] + f[i-1][1] + f[i-2][2]
f[i][1] = f[i-1][2]
f[i][2] = f[i][0] + f[i-1][1]
邊界條件 f[0][0] = f[1][1] = f[0][2] = 1
狀態:用f[i][j]表示(3 X i) + j個多餘塊的擺放方案數
例:當N = 4: