#41406: DP轉移


h9512218@gmail.com (賴譽毫)

學校 : 國立臺灣師範大學
編號 : 108800
來源 : [111.250.233.167]
最後登入時間 :
2024-07-28 09:18:30
b587. 10918 - Tri Tiling -- UVa10918 | From: [111.250.201.185] | 發表日期 : 2024-07-24 15:53

採用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[1][i]=dp[0][i-1]+dp[1][i-2]
--------------------------------------------------

dp[0][4]=dp[1][3]+(2*dp[0][2]+dp[1][1])

dp[1][3]=dp[0][2]+dp[1][1]
 (3*)0(3*)1(3*)2(3*)3(3*)4
01030 
1011  

以下將以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])

 
ZeroJudge Forum