總時間限制:
1000ms
記憶體限制:
65536kb
描述化學不及格的matrix67無奈選擇了文科。他必須硬著頭皮準備一次又一次的文科考試。
在這一學期一共有n次文科考試,考試科目有4種,分別為政治、歷史、地理和綜合。每次考哪一科是不定的,因此在考試前matrix67不知道應該 去複習哪一科的功課。他希望能**出下一次可能考的科目。於是,他收集到了以往的文科考試的資料。從以往的考試中,他發現了這樣幾個規律:
1.如果這次考的是政治,那麼下一次一定會考歷史;
2.如果這次考的是綜合,那麼下一次一定會考地理;
3.如果這次考的是歷史,那麼下一次要麼考政治,要麼考地理;
4.如果這次考的是地理,那麼下一次要麼考歷史,要麼考綜合。
matrix67已經知道,本學期的第一次考試科目為政治。他打算擬定乙個可以應對所有可能情況的應考複習計畫。因此,他想知道,整個學期有多少種可能的考試科目安排滿足以上規律。你能幫他算出來嗎?
輸入乙個正整數n,代表本學期總的考試次數。
輸入資料保證n<=10000。輸出乙個正整數,表示符合規律的科目安排方案的總數。
考慮到這個結果可能會很大,因此你只需要輸出它mod 7654321的值即可。樣例輸入
5樣例輸出
5
思路: 將政治,綜合設為1(下一步只通往一門學科),同理將歷史,地理設為2;
畫個樹圖:
1 //1層
|2 //2層
/ \1 2 //3層
/ / \
2 1 2 //4層
/ \ | / \
1 2 2 1 2 //5層
設第i層(i>2)數字2的個數為a[i];
看第i+1層(i>2)數字1的個數,層數每增1,上層的2將轉化為1,2
所以第i+1層1的個數為上層2的個數(即a[i]);
看第i+1層(i>2)數字2的個數,我把它分成兩塊:
第1塊:層數每增1,上層的2將轉化為1,2,由此產生的2的個數為a[i];
第2塊:層數每增1,上層的1將全部轉化成2,由此產生的2的個數為a[i-1];
兩塊加起來則第i+1層2的個數為a[i+1]=a[i]+a[i-1];
**實現:先求1的個數,再求2的個數,最後相加;
其中,a[1]=0,a[2]=1(由上圖可知);
ps:此題也可以用斐波那契數列來做
**實現:
#include
using
namespace std;
int a[
10005
];int
solve
(int n)
intmain
()
//純手打,打了接近2個小時,請珍惜這份** 文科生的悲哀
化學不及格的matrix67無奈選擇了文科。他必須硬著頭皮準備一次又一次的文科考試。在這一學期一共有n次文科考試,考試科目有4種,分別為政治 歷史 地理和綜合。每次考哪一科是不定的,因此在考試前matrix67不知道應該 去複習哪一科的功課。他希望能 出下一次可能考的科目。於是,他收集到了以往的文科...
文科生的悲哀(vijos1246)
演算法 dp program vijos1246 const maxn 100000 var n,m longint f array 0.maxn,0.5 of longint can array 0.maxn of boolean start array 0.maxn of longint fun...
文科生的悲哀 55頁的高三數學課本
近來一些人問我,聽說你們文科班的不學極限啊。我回答,嗯,而且更強的是,不學極限但學導數。這個話題非常有趣。我打算詳細介紹一下我們的課本是什麼樣子的。薄,封面綠色的,上書 第三冊 選修i 整本書只有兩章,統計和導數。統計裡面只有三節,抽樣方法 總體分布的估計 教你寫正字,畫 總體期望值和方差的估計。最...