01序列指的是01相间的序列,如“01010101010”,而“0110”不是。 求长度为n的01序列的子序列中有多少个也是01序列。(子序列的相邻字符在原串上可以不相邻) 由于这个数很大,请输出mod 1000000007后的值。用c++写
时间: 2024-02-17 21:01:47 浏览: 137
C++ 从1开始的数组下表排序,插入排序、交换排序、选择排序,归并排序
好的,下面是C++的实现代码:
```cpp
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int MOD = 1000000007;
int count_subsequences(int n, const string& s) {
vector<int> dp(n + 1);
dp[0] = 1;
vector<int> last_zero(2, -1);
for (int i = 1; i <= n; i++) {
if (s[i-1] == '0') {
dp[i] = dp[i-1];
}
else {
dp[i] = dp[i-1] + dp[last_zero[(i-1)%2]];
dp[i] %= MOD;
}
last_zero[i%2] = (s[i-1] == '0') ? (i-1) : last_zero[(i-1)%2];
}
int ans = 0;
for (int i = 1; i <= n; i++) {
ans += dp[i];
ans %= MOD;
}
return ans;
}
int main() {
int n;
string s;
cin >> n >> s;
cout << count_subsequences(n, s) << endl;
return 0;
}
```
这段代码与前面Python的实现非常类似,只不过使用了vector代替了数组,注意一下vector的下标从0开始。
阅读全文