lintcode 柵欄染色
阿新 • • 發佈:2019-02-20
我們有一個柵欄,它有n
個柱子,現在要給柱子染色,有k
種顏色可以染。
必須保證不存在超過2個相鄰的柱子顏色相同,求有多少種染色方案。
注意事項
n
和k
都是非負整數
n
=
3, k
= 2, return6
post 1, post 2, post 3 way1 0 0 1 way2 0 1 0 way3 0 1 1 way4 1 0 0 way5 1 0 1 way6 1 1 0
這應該也是典型的動態規劃問題吧,我們從最後的情況開始討論。可以分為兩種情況:1.最後兩根柱子顏色相同2.最後兩根柱子顏色不同
對於第一種情況,最後兩根柱子顏色相同,不能三根柱子顏色連續相同,所以最後兩根柱子的顏色選擇有k-1種.
對於第二種情況,最後兩根柱子顏色不同,那麼最後一根柱子的顏色有k-1種選擇方案.
class Solution { public: /* * @param n: non-negative integer, n posts * @param k: non-negative integer, k colors * @return: an integer, the total number of ways */ int numWays(int n, int k) { // write your code here if (n == 0) return 0; if (n == 1) return k; if (n == 2) return k*k; int d = k; int dp = k*k; for (int i = 3; i <= n; i++) { int dps = dp; dp = (d+dp) * (k-1); d = dps; } return dp; } };