超牛和lyd最近買了好多零食啊,可是呢,因為龍教很貪吃,經常偷吃他們的東西。
為了要讓龍教吃不到,他們想到了個方法,他們叫pkkj給他們n個箱子,然後他們就把箱子排成一列,把他們買回來的三種零食(包括薯片,果凍還有餅乾)放進那裡面。
然後讓龍教猜箱子裡面的食物,只有兩次機會,猜不到就沒得吃。
所以他們想讓相鄰的箱子裡面放的東西不相同(如果箱子數大於1,那麼頭尾的食物也不能相同)。
他們想知道到底有多少種放法,因為他們迷上三國殺,懶得想,所以就請聰明的你幫他們算算吧。
輸入格式
輸入資料報含多個測試例項,每個測試例項佔一行,即pkkj給他們的箱子數n,(0 < n <= 50)。
輸出格式
對於每個測試例項,請輸出全部的滿足要求的放法,每個例項的輸出佔一行。
輸入樣例12
輸出樣例36
先將條件分為兩個
前後不同零食
首尾不同零食
我們需要的是同時滿足條件1和2
的排列
首先考慮 n(n > 3)個箱子滿足條件1
的排列數 n滿足條件1,顯然 n滿足條件1 = 3 * 2n-1
考慮 n滿足條件1 的解集:只包括兩種解集只滿足條件1
和滿足條件1和2
所以有:n滿足條件1和2 = n滿足條件1 - n只滿足條件1
下面分析只滿足條件1
的排列
通過分析可以發現,對於任意n個箱子只滿足條件1
的排列,其前n-1個箱子的排列同時滿足條件1和2
,下面分析如何由後者推導出前者
分析後發現,因為只有三種零食,所以尾部加入的箱子中能並且只能
裝入和第乙個箱子相同的零食,所以對於n-1
個箱子同時滿足條件1和2
的乙個排列只能推導出一種n
個箱子只滿足條件1
的排列
則有: n只滿足條件1 = (n-1)同時滿足條件1和2
代入: n同時滿足條件1和2 = n滿足條件1 - n只滿足條件1
得:n同時滿足條件1和2 = n滿足條件1 - (n-1)同時滿足條件1和2
所以先推導出n = 1,2,的排列數,其餘排列數可以通過公式遞推得到
#include
#include
intmain()
;for
(int i =
3; i <
51; i ++
) nums[i]
=pow(2
, i -1)
*3- nums[i -1]
;while
(scanf
("%d"
,&n)
!=eof
)printf
("%lld\n"
, nums[n]);
return0;
}
ACM複習(24)8623 龍龍
description 在比賽的時候,1y 1 次ac 是很值得高興的事情。但很多大牛總會因為很弱智的錯誤先wa 一次,再ac。而很多時候,這點罰時的差距使得他們與金牌無緣。弱智錯誤系列中最顯著的就是忘記加龍龍。龍龍外國人叫它作long long,表示64位整數,輸入與輸出64位整數則可以使用例如 ...
ACM複習(45)10680 飛機
description 某國成立了乙個新的航空公司。該公司準備採購飛機來運營屬下的兩條航線a與b。他們聯絡了一些飛機製造商,這些製造商提供了他們飛機的資料。資料裡面記錄了每種飛機的載客量,以及他們飛航線a與航線b所需要的燃油量。通過市場調查,該公司摸清了兩條航線的日均客流量。已知該航空公司每日能夠採...
ACM入門(筆試複習)指南
從大一下冊開始參加程式設計競賽,到大三下,沒給學校帶來什麼榮譽,倒是學校和老師無私的鍛鍊了我。雖然是acm出身,我一直不敢寫關於acm相關的部落格。可能內心一直覺得自己太菜了,怕大佬們笑話吧。acm知識點圖譜 這個是noip的,跟acm差不多 因為是入門 筆試複習 教程,所以我就不去整那些我自己看不...