今年的ACM暑期集訓隊一共有18人,分為6支隊伍。其中有一個叫做EOF的隊伍,由04級的阿牛、XC以及05級的COY組成。在共同的集訓生活中,大家建立了深厚的友誼,阿牛準備做點什么來紀念這段激情燃燒的歲月,想了一想,阿牛從家里拿來了一塊上等的牛肉干,準備在上面刻下一個長度為n的只由”E” “O” “F”三種字符組成的字符串(可以只有其中一種或兩種字符,但絕對不能有其他字符),阿牛同時禁止在串中出現O相鄰的情況,他認為,”OO”看起來就像發怒的眼睛,效果不好。
你,NEW ACMer,EOF的崇拜者,能幫阿牛算一下一共有多少種滿足要求的不同的字符串嗎?
PS: 阿牛還有一個小秘密,就是準備把這個刻有 EOF的牛肉干,作為神秘禮物獻給杭電五十周年校慶,可以想象,當校長接過這塊牛肉干的時候該有多高興!這里,請允許我代表杭電的ACMer向阿牛表示感謝!
再次感謝!
Input
輸入數據包含多個測試實例,每個測試實例占一行,由一個整數n組成,(0 < n < 40)。
Output
對于每個測試實例,請輸出全部的滿足要求的涂法,每個實例的輸出占一行。
Sample Input
1 2
Sample Output
3 8
這道題我是先畫出了樹,發現O的數目是上一層E+F的數量,E+F是上一層(E+O+F)*2的數量 令f[n]等于本層E+F的數量 所以得到遞推公式: O=f[n-1] E+F=(f[n-1]+f[n-2])*2 E+F+O=f[n]+f[n-1]
#include<stdio.h>#include<stdlib.h>int main(){ long long f[42]={1,2,6}; int num,i; for(i=3;i<=42;i++) f[i]=(f[i-1]+f[i-2])*2; while(~scanf("%d",&num)){ printf("%I64d/n",f[num]+f[num-1]); } return 0;}新聞熱點
疑難解答