採用2維動態規劃,row代表缺角數(以下會用圖說明),column代表n,當row=0,奇數就會是0。base case,就是n<=2。
填表的時候,是由下而上,由左至右。
一般項:
dp[0][i]=2*dp[0][i-2]+dp[1][i-3]+dp[1][i-1]
dp[0][4]=dp[1][3]+(2*dp[0][2]+dp[1][1])
(3*)0 | (3*)1 | (3*)2 | (3*)3 | (3*)4 | |
0 | 1 | 0 | 3 | 0 | |
1 | 0 | 1 | 1 |
以下將以3*4的圖形來說明轉移式
右下角放直的磁磚(1)處,再來可以發現右上角的空間(2)處僅能放橫的,那問題變成解3*3缺一角的圖形有幾種放法(dp[1][3])
右下角也可以放橫的(1)處
有兩種類型(2*dp[0][2]+dp[1][1])
第一種:分成左右兩部分,右邊正方形(2種),左邊就是3*2的拼法(dp[0][2]),故為2*dp[0][2]
第二種:左邊跟右邊有相接,這種狀況只有(2)(3)處必須放橫的,(4)處只能放直的,左下角會凸出來,所以(5)處要放橫的。
故問題變成3*1缺一角(dp[1][1])
缺一角的圖解
3*3缺一角(dp[1][3])可以分成兩類
第一類:右下角放直的,就是變成解3*2的問題(dp[0][2])
第二類:除了用直的放在右下角,可以改換成2的橫的(1)(2)處,因為(1)(2)處的放法,(3)處只能放橫的。
可轉換成3*1缺一角的問題(dp[1][1])