筆記04 柵欄染色問題

2021-08-31 00:10:32 字數 659 閱讀 8659

這是一題來自google的面試題,屬於easy類題,其中的解題思路是運用動態規劃的思想。

這種給定乙個規則,計算有多少種結果的題目一般都是動態規劃,因為我們可以從這個規則中得到遞推式。根據題意,不能有超過連續兩根柱子是乙個顏色,也就意味著第三根柱子要麼根第乙個柱子不是乙個顏色,要麼跟第二根柱子不是乙個顏色。如果不是同乙個顏色,計算可能性的時候就要去掉之前的顏色,也就是k-1種可能性。假設dp[1]是第一根柱子及之前塗色的可能性數量,dp[2]是第二根柱子及之前塗色的可能性數量,則dp[3]=(k-1)dp[1] + (k-1)dp[2]。

遞推式有了,下面再討論下base情況,所有柱子中第一根塗色的方式有k中,第二根塗色的方式則是k*k,因為第二根柱子可以和第一根一樣。

下面是c++**:

class solution ;

if (n <= 2)

return dp[n];

if (k == 1)

return 0;

for (int i = 3; i <= n; ++i)

return dp[3];}};

LintCode 柵欄染色

lintcode 柵欄染色 lintcode表述有問題,原文是 必須保證任意兩個相鄰的柱子顏色不同 應該表述為 至多有兩根相鄰的柱子具有相同的顏色 此題使用動態規劃,狀態轉移方程為f i f i 1 k 1 f i 2 k 1 顯然f 0 k,f 1 k k 方法一 class solution p...

514 柵欄染色

3.28 這個題自己的錯誤,廢了很多時間。如果是單純地相鄰不許同色的話,應該就是這樣的 public static int numways1 int n,int k if k 1 n 2 int x int math.pow k 1,n 1 return x k 2 n 1 如果是不允許三根柱子相鄰...

LintCode 柵欄染色

題目描述 我們有乙個柵欄,它有n個柱子,現在要給柱子染色,有k種顏色可以染。必須保證最多只有兩個相鄰的柱子顏色相同,求有多少種染色方案。樣例 n 3,k 2,return 6 post 1,post 2,post 3 way1 0 0 1 way2 0 1 0 way3 0 1 1 way4 1 0...