染色問題 n個格仔,3種顏色

2021-08-27 10:17:15 字數 827 閱讀 5588

有排成一行的n個方格,用紅(red)、粉(pink)、綠(green)三色塗每個格仔,每格塗一色,要求任何相鄰的方格不能同色,且首尾兩格也不同色.求全部的滿足要求的塗法.

遞推公式:

a1 = 3

a2 = 6 //a(3,2)=6

a3 = 6 //a(3,3)=6

an=2*a(n-2)+a(n-1), n>=4

證明:考慮第n-1個格仔:

1. 如果這個格仔和第1個格仔顏色不同,那麼第n個格仔只有1種選擇,前n-1個格仔的選擇就是a(n-1),此時n個格仔的選擇是1*a(n-1)

2.如果這個格仔和第1個格仔顏色相同,那麼第n個格仔只有2種選擇,前n-2個格仔的選擇就是a(n-2),此時n個格仔的選擇時2*a(n-2)

所以有an=2*a(n-2)+a(n-1), n>=4

remak: 因為我們是考慮第n-1個格仔,該格仔和第1個格仔的顏色可能相同也可能不同,所以n>=4才可以。不然n=3的話,第n-1=3-1=2個格仔和第乙個格仔的顏色必然不同了,就沒有上面這2種情況了,所以要從n>=4開始推導。

具體題目可參見hduoj 2045題,**如下:

#include #include #include #define pi 3.1415927

using namespace std;

long long func(int n) ;

num[0]=3;

num[1]=6;//a(3,2)

num[2]=6;//a(3,3)

for(int i=3; i> n)

return 0;

}

染色問題(n個格仔,3種顏色)

有排成一行的 個方格,用紅 red 粉 pink 綠 green 三色塗每個格仔,每格塗一色,要求任何相鄰的方格不能同色,且首尾兩格也不同色 求全部的滿足要求的塗法.遞推公式 a1 3 a2 6 a 3,2 6 a3 6 a 3,3 6 an 2 a n 2 a n 1 n 4 證明 考慮第n 1個...

N個扇形M種顏色

題 將乙個圓形等分成n個小扇形,將這些扇形標記為1,2,3,n,現在使用m種顏色對其塗色,要求相鄰兩個扇形顏色不相同。求 有多少種塗色方法?備註 1.不考慮數值越界情況 2.n 1,m 3 3.乙個例子 如果n 3,m 3時,一共有6種塗法 兩種方法 數學公式法 我所搜到的基本都是這種方法 遞迴自己...

m個珠子共n種顏色,找出包含n種顏色的最短連續片段

原題目 題目分析 一 暴力搜尋 1 最簡單的方法 暴力搜尋,逐個掃瞄第i個位置開始包含n中顏色最短區間,時間複雜度為o m 2 2 從i開始掃瞄,每出現一種新的顏色,計數 1 當計數 n時候,結束,此時即為i開始的最短區間 二 1 掃瞄一遍陣列m,計算出每種顏色在陣列m中下一次出現的位置,存在資料n...