小红拿到了一个仅由数字字符组成的字符串。她准备选择一个非空子序列,使得该子序列中不包含连续的"61"子串。 小红想知道,有多少种不同的子序列选择方式?答案对 1e9+7取模。C++代码
时间: 2024-02-28 21:57:19 浏览: 149
以下是相同的动态规划思路的 C++ 代码实现:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
const int MOD = 1e9 + 7;
const int MAXN = 1e5 + 5;
char s[MAXN];
int dp[MAXN];
int main() {
cin >> s + 1;
int n = strlen(s + 1);
dp[0] = 1;
int last_6 = -1;
for (int i = 1; i <= n; i++) {
if (s[i] != '6' && s[i] != '1') {
dp[i] = (dp[i-1] * 2) % MOD;
} else if (s[i] == '1' && last_6 >= 0) {
dp[i] = (dp[i-1] * 2 - dp[last_6]) % MOD;
} else {
dp[i] = dp[i-1];
}
if (s[i] == '6') {
last_6 = i;
}
}
int ans = 0;
for (int i = 1; i <= n; i++) {
ans = (ans + dp[i]) % MOD;
}
cout << ans << endl;
return 0;
}
```
阅读全文