10918:Tri Tiling

問題文
http://uva.onlinejudge.org/external/109/10918.html

2×1のタイルを使って3×nの長方形を作るときの作り方が何通りあるかを求めよ。



















f[横の長さn]:=3×nの長方形の作り方の総和
g[横の長さn]:=3×nの長方形から隅を一つ消した形の作り方の総和

.......   AA......   AA......   A.......
....... = BB...... + B....... + A.......
.......   CC......   B.......   BB......
 f[ i ] = f[ i-2 ] + g[ i-1 ] + g[ i-1 ]

 ......    .......    AA.....
....... = A....... + BB......
.......   A.......   CC......
 g[ i ] = f[ i-1 ] + g[ i-2 ]
#include<iostream>
 
using namespace std;
 
int main(void){
 
    int f[40],g[40],n;
     
    f[0]=g[1]=1;
    f[1]=g[0]=0;
     
    for(int i=2;i<40;i++){
        g[i]=f[i-1]+g[i-2];
        f[i]=f[i-2]+g[i-1]*2;
    }
     
    while(cin >> n,~n)cout << f[n] << endl;
     
    return 0;
}