在一個3 X N的長方形方格中,鋪滿1X2的骨牌(骨牌個數不限制),給定N,求方案數

動態規劃_all_plus

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:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章