hdu 2501
http://acm.hdu.edu.cn/showproblem.php?pid=2501&PHPSESSID=fme1u1rdulrni3r4tbv5t5e186
递推分析:#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]
纯属个人理解,有问题可以提出