#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int a[21];
void dp()
{
    a[0]=3;
    a[1]=7;
    for(int i=2;i<=19;++i){
        a[i]=2*a[i-1]+a[i-2];
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    dp();
    while(n--)
    {
        int m;
        scanf("%d",&m);
        printf("%d\n",a[m-1]);
    }
    return 0;
}
DP 动态规划 Problem P 1016 不向后走的走路方案数
原文:http://blog.csdn.net/q1169917/article/details/51347480