題幹:
蒜頭君覺得白色的牆面好單調,他決定給房間的牆面塗上顏色。他買了 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
**如下:
#includeusingnamespace
std;
intmain()
intn;
cin>>n;
cout
}
藍橋杯 牆壁塗色
蒜頭君覺得白色的牆面好單調,他決定給房間的牆面塗上顏色。他買了3 種顏料分別是紅 黃 藍,然後把房間的牆壁豎直地劃分成 n 個部分,蒜頭希望每個相鄰的部分顏色不能相同。他想知道一共有多少種給房間上色的方案。例如,當 n 5時,下面就是一種合法方案。由於牆壁是乙個環形,所以下面這個方案就是不合法的。輸...
藍橋杯遞推 牆壁塗色
蒜頭君覺得白色的牆面好單調,他決定給房間的牆面塗上顏色。他買了3 種顏料分別是紅 黃 藍,然後把房間的牆壁豎直地劃分成 n 個部分,蒜頭希望每個相鄰的部分顏色不能相同。他想知道一共有多少種給房間上色的方案。例如,當n 5時,下面就是一種合法方案。藍紅黃紅黃 由於牆壁是乙個環形,所以下面這個方案就是不...
計蒜客CS109習題DP 牆壁塗色
蒜頭君覺得白色的牆面好單調,他決定給房間的牆面塗上顏色。他買了 3 3 種顏料分別是紅 黃 藍,然後把房間的牆壁豎直地劃分成 n n 個部分,蒜頭希望每個相鄰的部分顏色不能相同。他想知道一共有多少種給房間上色的方案。例如,當 n 5n 5 時,下面就是一種合法方案。由於牆壁是乙個環形,所以下面這個方...