典型的DP打表輸出水題。。。不過用遞歸卻會超時,ORZ

對于這樣一個0,1序列,a1,a2,a3,...a(i-2),a(i-1),a(i)...
設f(i)為輸入的數對應的結果
用DP做的話,假設f(i-2),f(i-1)已經知道了,那么求f(i)應該如下:
當取a(i)=0,那么結果肯定和f(i-1)是一樣的,因為在后面追加的是0,肯定不會導致存在相鄰;
當取a(i)=1,那么此時只要知道a(i-2)就可以了,因為我們可以使a(i-1)為0,這樣就不會導致相鄰的1了;
所以a[i]=a[i-1]+a[i-2];

#include <iostream>
#include 
<string>
using namespace std;

int fabi[50];
void init()
{
    fabi[
1]=2;
    fabi[
2]=3;
    
for (int j=3;j<=45;j++)
    
{
        fabi[j]
=fabi[j-1]+fabi[j-2];
    }

}


int main()
{
     
int n,i=1,num;
     init();
     cin
>>n;
     
while (n>0)
     
{
         cin
>>num;
         printf(
"Scenario #%d:\n",i++);
         printf(
"%d\n\n",fabi[num]);
         n
--;
     }

}