原题链接
一道递推题,其实当你自己算 n = 3 的时候 你大致可以猜出来了已经
设a[n]是向上走n步的方法数,b[n]是向左或向右走的方法数,
2 则a[n]=a[n-1]+b[n-1], b[n]=2*a[n-1]+b[n-1]
3 因为f[n]=a[n]+b[n]
4 化简得f[n]=3*a[n-1]+2*b[n-2]=2*f[n-1]+a[n-1]=2*f[n-1]+f[n-2]
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
long long a[22];
void init()
{
int i;
a[1] = 3;
a[2] = 7;
for (i=3; i<=20; i++)
{
a[i]=2* a[i-1] + a[i-2];
}
}
using namespace std;
int main()
{
int cases , n;
cin>>cases;
init();
while (cases--)
{
cin>>n;
cout<<a[n]<<endl;
}
return 0;
}