c++ - 没有连续 1 的位串,使用自顶向下 DP
问题描述
我试图将自下而上的动态编程方法(在链接中提到)转换为递归关系,但无法获得正确的输出。
#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
解决方案
至少对于N==1
您有两个序列 [0] 和 [1] 的情况。可能最好从极端案例开始^_^ 对于案例b==1
和b==0
您使用不同的操作s
,应该是这样吗?
推荐阅读
- java - redis hash中如何通过fuzzy key查询数据
- javascript - 用户登录后将文本动态复制到剪贴板
- google-bigquery - BigQueryIO 读取与 fromQuery
- javascript - 如何动态更改子类别?
- android - Linphone Android 文件共享服务器
- pytorch - 不安全平台警告
- python - 熊猫可以计算 RollingGroupby 对象上的字符串类型列吗?
- python - App Engine Flexible 无法将数据存储区与 websockets 示例一起使用
- javascript - 点击时图像下方的 Fancybox 自定义标题(段落)
- kotlin - 在 Kotlin 中创建一个带有枚举参数的函数