10. We Love ABC

2024-03-28 22:38
文章标签 abc love

本文主要是介绍10. We Love ABC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:We Love ABC

给一个只含 A B C ? 四种字符的串,其中 ? 可以匹配任意字母,问能形成多少个子序列 ABC

先不考虑问号,在只有字母的情况下很容易想到动态规划: d p [ i ] [ j ] dp[i][j] dp[i][j] 表示前 i i i 个字符形成长度为 j j j 的子序列,直接从 i − 1 i-1 i1 转移就行了。然后考虑问号的影响,问号相当于三种字母随便填,所以即便问号这一位不用于答案的子序列中,也会使上一个状态的贡献翻上三倍;如果这一位在子序列里用到了,那就相当于三种字母各转移一次。在之前的 dp 上稍作修改即可。

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int maxn = 1e5 + 5;
const ll mod = 1e9 + 7;
ll dp[maxn][4];
char s[maxn];
int main() {cin >> (s + 1);int n = strlen(s + 1);dp[0][0] = 1;for (int i = 1; i <= n; ++i) {if (s[i] == '?') {for (int j = 0; j <= 3; ++j)dp[i][j] = dp[i - 1][j] * 3 % mod;dp[i][1] = (dp[i][1] + dp[i - 1][0]) % mod;dp[i][2] = (dp[i][2] + dp[i - 1][1]) % mod;dp[i][3] = (dp[i][3] + dp[i - 1][2]) % mod;} else {for (int j = 0; j <= 3; ++j)dp[i][j] = dp[i - 1][j];if (s[i] == 'A') dp[i][1] = (dp[i][1] + dp[i - 1][0]) % mod;else if (s[i] == 'B') dp[i][2] = (dp[i][2] + dp[i - 1][1]) % mod;else dp[i][3] = (dp[i][3] + dp[i - 1][2]) % mod;}}cout << dp[n][3] << endl;return 0;
}

这篇关于10. We Love ABC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/856888

相关文章

js中怎样对“abc”进行MD5、sha256哈希计算?

在 JavaScript 中,可以使用 CryptoJS 库来进行 MD5 哈希计算。首先,你需要在 HTML 文件中导入 CryptoJS 库,例如: <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script> 然后,在 JavaScript 文件中,可

2024国赛数学建模ABC题思路模型

完整的思路模型请查看文末名片 完整的思路模型请查看文末名片 完整的思路模型请查看文末名片

【ZOJ】3881 From the ABC conjecture【暴力容斥】

传送门:【ZOJ】3881 From the ABC conjecture 复杂度大概 O(N0.67) O(N^{0.67}),我也不会算www,首先转换一下(我们是根据积性函数打表找规律得到的,也可以推出来)使得: g(N)=∏pi ϵ N(pia+1) g(N)=\prod_{pi~\epsilon ~N} (pi^a+1) 暴力展开发现贡献为: h(N)=

为何R语言love图显示的分类变量点与smd值不一致

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 问题描述   为何R语言love图显示的分类变量点与smd值不一致。 R语言用Matchit进行倾向评分匹配,匹配后用summary计算smd值,用

题解AtCoder ABC 358 F Easiest Maze

一道模拟题。 思路 最短的路线是直接竖着走下来,经过 n n n 个格子,所以 k k k 最小是 n n n。如果想要延长路线,可以采用九转大肠的形状,就像这样: 可以发现,每次向左走之后都必须走回来,所以每次新经过的格子数是偶数,得到 k − n k-n k−n 是偶数才有可行的方案。 首先,把整张图表的初始状态设为如下形式(即每个格点都是独立的): +++++S++o|o|o

面试算法题:三线程循环打印ABC

面试遇到三线程循环打印ABC的题目,当时没写出来,然后经过查阅,进行整理了一下。 1、题目 有A、B、C 三个线程,A线程 输出“A”,B线程 输出“B”,C线程 输出“C”,要求同时启动3个线程,按照顺序输出“ABC”,循环10次,请使用代码实现。 2、问题分析 A、B、C 三个线程;这表示我们要使用多线程同步,有人说了这不废话吗。是的,笔者只是想说,多线程的实现,有几种方式,①继承Th

[Algorithm][综合训练][小葱的01串][小红的ABC][不相邻取数]详细讲解

目录 1.小葱的01串1.题目链接2.算法原理详解 && 代码实现 2.小红的ABC1.题目链接2.算法原理详解 && 代码实现 3.不相邻取数1.题目链接2.算法原理详解 && 代码实现 1.小葱的01串 1.题目链接 小葱的01串 2.算法原理详解 && 代码实现 解法:滑动窗口 --> ⻓度固定的滑动窗⼝,要想符合要求,必定是⼀半⼀半的 选择区域的时候,仅需

nothing gonna change my love to you

nothing gonna change my love to you

my love

my  love my  love my  love my  love

I wanna stay with you foreverI wanna stay with you forever I wanna stay with youI lay my love on you

I lay my love on you I wanna stay with you forever I wanna stay with you forever I wanna stay with you forever I wanna stay with you forever I wanna stay with you forever I wanna stay with you f