nyoj 252 01串 (動態規劃+斐波那契數列)

計算不含有“11”子串的m長度的01串共有多少個,m-1長度的01串有加0 或 加1兩種方式來成爲m長度的01串,
1.第m位是0的情況,就等於前m-1位的情況全部加0
2.第m位是1是,第m-1位一定是0,而m-1長度的01串可能不就等於m-2長度的01串全部加0嗎,所以第m位是1的可能就=第m-2長度的01串全部加0的可能

這裏用dp(m)表示m長度的01串的個數
dp(1)=2;
dp(2)=3;
dp(3)=dp(1)+dp(2);
dp(4)=dp(2)+dp(3);
…………

綜上,dp(m)=dp(m-1)+dp(m-2)

#include<iostream>
using namespace std;
int main() {
    int n,i,m,a[41]= {0,2,3};
    for(i=3; i<=40; i++)
        a[i]=a[i-1]+a[i-2];
    cin>>n;
    while(n--) {
        cin>>m;
        cout<<a[m]<<endl;
    }
    return 0;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章