• 3-计算01串


    /*描述

        ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有“11”子串的这种长度的01串共有多少个,他希望你能帮帮他。

        注:01串的长度为2时,有3种:00,01,10。

    输入
        第一行有一个整数n(0<n<=100),表示有n组测试数据;
        随后有n行,每行有一个整数m(2<=m<=40),表示01串的长度;
    输出
        输出不含有“11”子串的这种长度的01串共有多少个,占一行。
    样例输入

        2
        2
        3

    样例输出

        3
        5
    */


    #include <iostream>
    using namespace std;
    int dp[50];

    int fun(int m){
        if(m == 0)
            return dp[m] = 0;
        if(m == 1)
            return dp[m] = 2;
        if(m == 2)
            return dp[m] = 3;
        if(m == 3)
            return dp[m] = 5;
        return dp[m] = fun(m - 1) * 2 - fun(m - 3); //加一位数增加2倍,但要减去不合格的,往前考虑 三位就刚好可以递推
    }

    int main(){
        int n;
        cin >> n;
        while(n--){
            int m;
            cin >> m;
            cout << fun(m) << endl;
        }
        return 0;
    }

  • 相关阅读:
    2020.11.17
    2020.11.26
    2020.11.18
    2020.12.01
    2020.11.23
    Java编程规范
    20201003 千锤百炼软工人
    2020081920200825 千锤百炼软工人
    20201004 千锤百炼软工人
    20200929 动手动脑
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/7384360.html
Copyright © 2020-2023  润新知