使用自上而下的DP的不连续1的位串

时间:2019-12-22 21:29:38

标签: c++ dynamic-programming bitstring

count all distinct binary strings without two consecutive 1's

我试图将自底向上的动态编程方法(在链接中提到的 )转换为递归关系,但是无法获得正确的输出。

#include<iostream>
#define n 4
using namespace std;


int bitstring(int N, int b = 0)
{
    static int s = 0;
    //termination condition
    if (N == 1)
        return 1;
    if(b == 1)
    {
        s += bitstring(N - 1, 0);
    }
    if (b == 0)
    {
        s = bitstring(N - 1, 0) + bitstring(N - 1, 1);
    }
    return s;
}

int main()
{
    cout << bitstring(n) << endl;
    return 0;
}

对于N = 3 输出为 5

N = 3的插图

                f(3,0)        f(3,1)
                /     \          |
            f(2,0)  f(2,1)     f(2,0)
            /   \      |       /     \
        f(1,0) f(1,1) f(1,1)  f(1,0)  f(1,1)
          |      |       |      |        |
          1      1       1      1        1

1 个答案:

答案 0 :(得分:0)

至少对于情况N==1,您有两个序列[0]和[1]。 从极端情况开始可能更好^ _ ^ 对于案例b==1b==0,您正在对s使用不同的操作,应该是这样吗?