阿牛的EOF牛肉串

2021-10-08 05:32:04 字數 1861 閱讀 8000

problem description

今年的acm暑期集訓隊一共有18人,分為6支隊伍。其中有乙個叫做eof的隊伍,由04級的阿牛、xc以及05級的coy組成。在共同的集訓生活中,大家建立了深厚的友誼,阿牛準備做點什麼來紀念這段激情燃燒的歲月,想了一想,阿牛從家裡拿來了一塊上等的牛肉乾,準備在上面刻下乙個長度為n的只由"e" "o" "f"三種字元組成的字串(可以只有其中一種或兩種字元,但絕對不能有其他字元),阿牛同時禁止在串**現o相鄰的情況,他認為,"oo"看起來就像發怒的眼睛,效果不好。

你,new acmer,eof的崇拜者,能幫阿牛算一下一共有多少種滿足要求的不同的字串嗎?

ps: 阿牛還有乙個小秘密,就是準備把這個刻有 eof的牛肉乾,作為神秘禮物獻給杭電五十周年校慶,可以想象,當校長接過這塊牛肉乾的時候該有多高興!這裡,請允許我代表杭電的acmer向阿牛表示感謝!

再次感謝!

input

輸入資料報含多個測試例項,每個測試例項佔一行,由乙個整數n組成,(0output

對於每個測試例項,請輸出全部的滿足要求的塗法,每個例項的輸出佔一行。

sample input

1 2sample output

3 8題意:讓你用e、o、f組成乙個長度為n的字串,o和o不能相遇,問你可以組成多少種不同的字串。

思路:

這個題是用遞迴來做的,那麼,為什麼使用遞迴呢?我們知其然,也要知其所以然。

題意是讓求有多少長度為n的字串,也有乙個限制條件。我做了很多題,發現凡是求第n個什麼什麼的,都遵循一定的規律,那麼我們要麼用公式求解、要麼用遞推求解、要麼用遞迴求解...

如果我們使用遞迴的話,那麼肯定要找到乙個對每乙個n都適用的規律,把這個問題化成若干個相似的小問題。遞迴的話,一般的順序是從後往前看,那我們從第n個往前看,看能不能找到乙個對每乙個n都適用的規律。我們建立乙個函式,f(n)表示e、o、f能組成多少個不同的長度為n的字串。

因為題目有限制條件,o和o不能相連,那我們對於第n個字元就要分類討論一下。第n個字元能填e、o、f三種情況。

第一種情況,如果我們第n個字元填e,那麼第n-1個字元填啥都可以,不受第n個字元的限制,在第n個字元確定為e的前提下,那麼前n-1個字元能組成的方案數和n個字元能組成的方案數是一樣的,即f(n)=f(n-1)。

第二種情況,如果我們第n個字元填f,和第一種情況相似,第n-1個字元填啥都可以,不受第n個字元的限制,在第n個字元確定為f的前提下,那麼前n-1個字元能組成的方案數和n個字元能組成的方案數是一樣的即f(n)=f(n-1)。

第三種情況,如果我們第n個字元填o,由於o和o不能相連,第n-1個字元可以填e、f兩種情況,那麼f(n)=2*f(n-1)。第n-1個字元如果填e,由情況1可知,第n-2個字元不受第n-1個字元限制,f(n-1)=f(n-2),第n-1個字元填f,與之相同。故,f(n)=2*f(n-1)=2*f(n-2)。

綜合以上三種情況,f(n)=f(n-1)+f(n-1)+2*f(n-2)=2[f(n-1)+f(n-2)]。

ok,到這裡,我們就發現這個問題對每乙個n都符合上面的三種情況,所以我們就能使用奇妙的遞迴了,至於遞迴終止條件,把前兩個方案數求出來就可以了。

#include #include #include #include using namespace std;

typedef long long ll;

ll f(ll n)

int main()

{

ll n;

while(cin>>n) cout《碎碎念:搜題解的時候發現有一博友,把前幾種方案數求出來後,直接看出來規律,頓時覺得:我擦,這哥們兒小學數學肯定超好。其實這也是一種做題方式,先求幾個方案,找找規律,心裡也有底了,若能很快做出來題,何樂而不為?當然,在平時,我們還是要注重演算法本身的。

阿牛的EOF牛肉串

題目描述 今年的acm暑期集訓隊一共有18人,分為6支隊伍。其中有乙個叫做eof的隊伍,由04級的阿牛 xc以及05級的coy組成。在共同的集訓生活中,大家建立了深厚的友誼,阿牛準備做點什麼來紀念這段激情燃燒的歲月,想了一想,阿牛從家裡拿來了一塊上等的牛肉乾,準備在上面刻下乙個長度為n的只由 e o...

阿牛的EOF牛肉串

problem description 今年的acm暑期集訓隊一共有18人,分為6支隊伍。其中有乙個叫做eof的隊伍,由04級的阿牛 xc以及05級的coy組成。在共同的集訓生活中,大家建立了深厚的友誼,阿牛準備做點什麼來紀念這段激情燃燒的歲月,想了一想,阿牛從家裡拿來了一塊上等的牛肉乾,準備在上面...

阿牛的EOF牛肉串

今年的acm暑期集訓隊一共有18人,分為6支隊伍。其中有乙個叫做eof的隊伍,由04級的阿牛 xc以及05級的coy組成。在共同的集訓生活中,大家建立了深厚的友誼,阿牛準備做點什麼來紀念這段激情燃燒的歲月,想了一想,阿牛從家裡拿來了一塊上等的牛肉乾,準備在上面刻下乙個長度為n的只由 e o f 三種...