/*
這題本來一頭霧水,但在看完一個博主的題解以後,有種“驚爲天人”之感...後來反思了一下,以前做數學題時,其實是有用過逆推法的,從最終的結果出發,不斷推理之前一步的情況
仔細想了一下,遞推的許多題目,似乎都是從最後 1 個開始分析,不斷倒推前一個,再前一個的情況...
剛剛做的那道,骨牌鋪方格,也是如此,先從最後的情況着手分析,最後的骨牌可以橫着放和豎着放,在分別推導橫着放的情況是固定前多少個?豎着放又是需要先固定好前多少個?這樣逐步遞推,如果出現不能拆分爲幾種情況,或者,情況的拆分方式,與後面的哪些骨牌拆分方式不同時,一般就是要作爲遞推基礎,這種特殊的情況,就需要在初始化時就賦值,而不能通過遞推公式計算得到
這題也是如此,從最後的情況,不斷倒推之前一步的情況,直到碰到遞推基礎。不過後來看了下這個博主的博客,覺得自己不可能描述得更加清楚了,就直接搬運鏈接過來:
http://blog.csdn.net/smile_7x/article/details/8301837
*/
#include <iostream>
#include <cstring>
#define rep(i, k, n) for (int i = k; i < (n); i++)
#define Clear(x, y) memset(x, 0, sizeof(x))
using namespace std;
const int N = 55;
typedef long long LL;
LL f[N];
int n;
int main()
{
Clear(f, 0);
f[1] = 3; f[2] = 8;
rep(i, 3, N) f[i] = 2 * ( f[i - 1] + f[i - 2] );
while (cin >> n)
{
cout << f[n] << endl;
}
return 0;
}