題目描述:
有 k 種顏色的塗料和乙個包含 n 個柵欄柱的柵欄,每個柵欄柱可以用其中一種顏色進行上色。
你需要給所有柵欄柱上色,並且保證其中相鄰的柵欄柱 最多連續兩個 顏色相同。然後,返回所有有效塗色的方案數。
注意:
n 和 k 均為非負的整數。
示例:
輸入: n = 3,k = 2
輸出: 6
解析: 用 c1 表示顏色 1,c2 表示顏色 2,所有可能的塗色方案有:
方法1:
主要思路:
(1)使用動態規劃,對於當前的位置,如果和前乙個位置顏色一樣,則有dp[i-1]種,則要和更前面乙個不一樣,有 k-1 種,故總的有 dp[i-1](k-1)種;
(2)如果和更前乙個顏色一樣,則有 dp[i-2]種,則要和前面乙個顏色不一樣,則有 (k-1)種,則總的有 dp[i-2](k-1)種;
(3)故對於當前位置有 dp[i]=dp[i-1](k-1)+dp[i-2](k-1);
class
solution
if(n==1)
if(n==2)
//定義動態陣列
vector<
int>
dp(n+1,
0); dp[0]
=0; dp[1]
=k; dp[2]
=k*k;
for(
int i=
3;i<=n;
++i)
return dp[n]
;//返回結果}}
;
方法2:class
solution
if(n==1)
int tmp=0;
int cur=k*k;
int pre=k;
for(
int i=
3;i<=n;
++i)
return cur;}}
;
276 柵欄塗色
當只有乙個柱子需要塗色時,有k種可塗色方案 當有兩個柱子需要塗色時,有k k 1 diff k same 種塗色方案 當有三個柱子需要塗色時,有 same diff k 1 diff diff same 種方案。1 class solution object 2def numways self,n,...
力扣276柵欄塗色
兩種動態規劃法 一 當前柵欄i與之前柵欄i 1顏色相同,更之前柵欄i 2的塗色方案為f i 2 當前柵欄的塗色方式有k 1種。i與i 1的顏色不一樣,當前柵欄顏色塗色方式有k 1種 f i f i 2 k 1 f i 1 k 1 二 當前i的顏色,由i 1和i 2的顏色是否相同決定 從i 2開始 i...
LeetCode276 柵欄塗色
1.題目描述 有 k 種顏色的塗料和乙個包含 n 個柵欄柱的柵欄,每個柵欄柱可以用其中一種顏色進行上色。你需要給所有柵欄柱上色,並且保證其中相鄰的柵欄柱 最多連續兩個 顏色相同。然後,返回所有有效塗色的方案數。注意 n 和 k 均為非負的整數。示例 輸入 n 3,k 2 輸出 6 解析 用 c1 表...