递推分析:#include <iostream>
using namespace std; int main() { int t,n,a[31]; a[0]=0; a[1]=1; a[2]=3; for(int i=3; i<31; i++) a[i]=a[i-1]+2*a[i-2]; cin>>t; while(t--) { cin>>n; cout<<a[n]<<endl; } return 0; } /* 假设2*n个空间,已知a[n-1]和a[n-2]。 (1)、先把2*(n-1)放在空间的上方,那么剩余的2*1的空间只能放一个横放的2*1,这里有a[n-1]种 (2)、先把2*(n-2)放在空间的上方,那么剩余的2*2的空间可以放两个横放的2*1,两个竖放的2*1,一个2*2,共3种,但是,注意的是,两个横放的2*1这种情况与(1)的重复,so,只有两种情况符合,这里有2*a[n-2]种 so,a[n]=a[n-1]+2*a[n-2] 纯属个人理解,有问题可以提出