考虑在一个确定的括号序列中,我们可以枚举中间位置,按左右最长延伸出去的答案计算。

我们很自然的思考,我们直接维护左右两边,在删除一些字符后能够延伸的最长长度。

我们设\(f_{i,j}\)为\(i\)点合法删除向左延伸的最大长度。

\(
f_{i,j} =
\left\{
\begin{aligned}
&f_{i - 1,j} (a[i] = ')'\ )\\
&f_{i - 1,j - 1}(a[i] = ')'\ )\\
&f_{i - 1,j} + f_{i - 1 ,j - 1} (a[i] = '?'\ )\\
\end{aligned}
\right.
\)

设\(g_{i,j}\)为向右延伸,则有同样的转移。

\(ans = \sum_{i = 1}^n\sum_{j = 1}^j f_{i,j} * g_{i + 1,j} * j\)

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
#define N 2005
#define mod 998244353 char a[N]; ll n;
ll f[N][N],g[N][N]; int main(){
scanf("%s",a + 1);
n = strlen(a + 1);
f[0][0] = 1;
for(int i = 1;i <= n;++i){
if(a[i] == '(' || a[i] == '?')
for(int j = 1;j <= n;++j)
f[i][j] = (f[i][j] + f[i - 1][j - 1]) % mod;
if(a[i] == ')' || a[i] == '?')
for(int j = 0;j <= n;++j)
f[i][j] = (f[i][j] + f[i - 1][j]) % mod;
}
g[n + 1][0] = 1;
for(int i = n;i >= 1;--i){
if(a[i] == ')' || a[i] == '?')
for(int j = 1;j <= n;++j)
g[i][j] = (g[i][j] + g[i + 1][j - 1]) % mod;
if(a[i] == '(' || a[i] == '?')
for(int j = 0;j <= n;++j)
g[i][j] = (g[i][j] + g[i + 1][j]) % mod;
}
ll ans = 0;
for(int i = 1;i <= n - 1;++i)
for(int j = 1;j <= n;++j)
ans = (ans + f[i][j] * g[i + 1][j] % mod * j % mod) % mod;
std::cout<<ans<<std::endl;
}

CF1264D1 Beautiful Bracket Sequence (easy version)的更多相关文章

  1. CF1264D2 Beautiful Bracket Sequence (hard version)

    考虑\(D1\)的\(O(n^2)\),我们直接进行组合处理. 考虑在\(p\)这个位置,左边有\(l\)个(,右边有\(r\)个),左边有\(l\)个问号,右边有\(r\)个问号. 这个位置的贡献为 ...

  2. Numerical Sequence (easy version)

    http://codeforces.com/problemset/problem/1216/E1 E1. Numerical Sequence (easy version) time limit pe ...

  3. CF1264D2 Beautiful Bracket Sequence

    我们枚举每两个字符的空档,统计一个空档左边有 \(l\) 个左括号, 右边有 \(r\) 个右括号,左边有 \(u\) 个问号,右边有 \(v\) 个问号. 则对于 \(p\) 的答案 \(ans_p ...

  4. Codeforces 1264D - Beautiful Bracket Sequence(组合数学)

    Codeforces 题面传送门 & 洛谷题面传送门 首先对于这样的题目,我们应先考虑如何计算一个括号序列 \(s\) 的权值.一件非常显然的事情是,在深度最深的.是原括号序列的子序列的括号序 ...

  5. Ping-Pong (Easy Version)(DFS)

    B. Ping-Pong (Easy Version) time limit per test 2 seconds memory limit per test 256 megabytes input ...

  6. CF1225B1 TV Subscriptions (Easy Version)

    CF1225B1 TV Subscriptions (Easy Version) 洛谷评测传送门 题目描述 The only difference between easy and hard vers ...

  7. UESTC 1546 Bracket Sequence

                                        Bracket Sequence Time Limit: 3000MS   Memory Limit: 65536KB   64 ...

  8. CF#138 div 1 A. Bracket Sequence

    [#138 div 1 A. Bracket Sequence] [原题] A. Bracket Sequence time limit per test 2 seconds memory limit ...

  9. CodeForces 670E Correct Bracket Sequence Editor(list和迭代器函数模拟)

    E. Correct Bracket Sequence Editor time limit per test 2 seconds memory limit per test 256 megabytes ...

随机推荐

  1. 一个小众搞笑的xss漏洞练习平台

    XSS是当今网络安全事件中数量最多的攻击方式,虽然其危害性不高,但主要和其他攻击手段相结合,以实现一个复杂的攻击场景.那么,XSS是什么? XSS全称跨站脚本(Cross Site Scripting ...

  2. Excel一对多查找

    很多人在Excel中用函数公式做查询的时候,都必然会遇到的一个大问题,那就是一对多的查找/查询公式应该怎么写?大多数人都是从VLOOKUP.INDEX+MATCH中入门的,纵然你把全部的多条件查找方法 ...

  3. Python设置Excel样式

    前面已经详细讲解过使用Python对Excel表格进行读.写操作,本文主要讲解下使用Python设置Excel表格的样式. 深入学习请参考openpyxl官方文档: https://openpyxl. ...

  4. 网络通信IO的演变过程(二)(一个门外汉的理解)

    2.NIO 当与别人谈论NIO时,一定要弄清楚别人说的NIO是指哪个含义? NIO有2种含义: 1.NonBlocking IO,基于操作系统谈 2.Java New IO,基于Java谈 我们这里主 ...

  5. 【数据结构与算法Python版学习笔记】树——相关术语、定义、实现方法

    概念 一种基本的"非线性"数据结构--树 根 枝 叶 广泛应用于计算机科学的多个领域 操作系统 图形学 数据库 计算机网络 特征 第一个属性是层次性,即树是按层级构建的,越笼统就越 ...

  6. CentOS 文件管理

    目录 目录管理 目录结构 切换目录 查看目录 创建目录 复制目录 剪切目录 删除目录 文件管理 查看文件 创建文件 复制文件 剪切文件 删除文件 创建链接 目录管理 目录也是一种文件. 蓝色目录,绿色 ...

  7. 通过串口利用printf函数输出数据

    一.printf函数格式 printf函数具有强大的输出功能 %表示格式化字符串输出 目前printf支持以下格式的输出,例如: printf("%c",a);输出单个字符. pr ...

  8. 如何用PADS进行PCB设计?这6步就够了

    在使用PADS进行PCB设计的过程中,需要对印制板的设计流程以及相关的注意事项进行重点关注,这样才能更好的为工作组中的设计人员提供系统的设计规范,同时也方便设计人员之间进行相互的交流和检查. 02 设 ...

  9. python doc os 参考

    os --- 操作系统接口模块 源代码: Lib/os.py 该模块提供了一些方便使用操作系统相关功能的函数. 如果你是想读写一个文件,请参阅 open(),如果你想操作路径,请参阅 os.path  ...

  10. cf20B Equation(认真仔细题)

    题意: 求AX^2+BX+C=0的根 思路: 考虑到A,B,C所有可能的情况 代码: double a,b,c; int main(){ cin>>a>>b>>c; ...