原题链接:
http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=3§ionid=1&problemid=8
分析:
分直走和左右走。
直走:
直走每一步都可直走,所以有a[ i ]=F [ i-1 ].
左右走:
①上一步直走,则可左右走,所以有 a[ i-1 ] * 2 .
②上一步左右走,则只可左右走,所以有 b[ i-1 ].
F[ i ] =F [ i-1 ]+a[ i-1 ]*2+b [ i -1 ]
=2*F[ i-1 ]+ a[i-1]
=2*F[ i-1 ]+F[ i-2 ]
代码如下:
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
using namespace std;
long long dt[25] = {0,3,7};
int main()
{
for (int i = 3; i <= 20; i++)
dt[i] = 2 * dt[i - 1] + dt[i - 2];
int T;
scanf("%d", &T);
while (T--)
{
int n;
scanf("%d", &n);
printf("%d\n", dt[n]);
}
return 0;
}