藍橋杯 計蒜客之牆壁塗色

2022-03-27 09:16:25 字數 900 閱讀 5905

題幹:

蒜頭君覺得白色的牆面好單調,他決定給房間的牆面塗上顏色。他買了 33 種顏料分別是紅、黃、藍,然後把房間的牆壁豎直地劃分成 nn 個部分,蒜頭希望每個相鄰的部分顏色不能相同。他想知道一共有多少種給房間上色的方案。

例如,當 n = 5時,下面就是一種合法方案。

由於牆壁是乙個環形,所以下面這個方案就是不合法的。

乙個整數 n,表示房間被劃分成多少部分。(1≤n≤50)

乙個整數,表示給牆壁塗色的合法方案數。

樣例輸入

4
樣例輸出

18

題目分析:

找出 ans[n]與 ans[n−1] 和 ans[n−2] 的關係。

考慮第 1塊和 n-1塊顏色不一樣的情況,現在第 n 塊要和第n−1 和 1都不一樣,但是只有3 種顏色,所以n 只有一種顏色選擇,這種情況方案數正好是 ans[n−1]。

考慮第 1塊和 n−1 塊顏色一樣的情況,第 n−2 塊必然要和第n−1 塊不同,同時也就和第 1 塊不同,前面n−2 塊方案數是 ans[n−2],第 n 塊要和第 1 塊和第n−1 塊不同,有 2 種選擇,所以這

種情況方案數是 2∗ans[n−2]。

上面 2 種情況加起來就是總方案數。

注意: ans[1]=0  ///仔細地想一想,牆的最邊緣的兩部分不能相同

ans[2]=6  ///剛開始我寫的是ans[2]=3,當時以為ab和ba是一回事,但事實是「不是一回事」。

陣列要用long long int

**如下:

#includeusing

namespace

std;

intmain()

intn;

cin>>n;

cout

}

藍橋杯 牆壁塗色

蒜頭君覺得白色的牆面好單調,他決定給房間的牆面塗上顏色。他買了3 種顏料分別是紅 黃 藍,然後把房間的牆壁豎直地劃分成 n 個部分,蒜頭希望每個相鄰的部分顏色不能相同。他想知道一共有多少種給房間上色的方案。例如,當 n 5時,下面就是一種合法方案。由於牆壁是乙個環形,所以下面這個方案就是不合法的。輸...

藍橋杯遞推 牆壁塗色

蒜頭君覺得白色的牆面好單調,他決定給房間的牆面塗上顏色。他買了3 種顏料分別是紅 黃 藍,然後把房間的牆壁豎直地劃分成 n 個部分,蒜頭希望每個相鄰的部分顏色不能相同。他想知道一共有多少種給房間上色的方案。例如,當n 5時,下面就是一種合法方案。藍紅黃紅黃 由於牆壁是乙個環形,所以下面這個方案就是不...

計蒜客CS109習題DP 牆壁塗色

蒜頭君覺得白色的牆面好單調,他決定給房間的牆面塗上顏色。他買了 3 3 種顏料分別是紅 黃 藍,然後把房間的牆壁豎直地劃分成 n n 個部分,蒜頭希望每個相鄰的部分顏色不能相同。他想知道一共有多少種給房間上色的方案。例如,當 n 5n 5 時,下面就是一種合法方案。由於牆壁是乙個環形,所以下面這個方...