CF1264D1 Beautiful Bracket Sequence (easy version)
考虑在一个确定的括号序列中,我们可以枚举中间位置,按左右最长延伸出去的答案计算。
我们很自然的思考,我们直接维护左右两边,在删除一些字符后能够延伸的最长长度。
我们设\(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)的更多相关文章
- CF1264D2 Beautiful Bracket Sequence (hard version)
考虑\(D1\)的\(O(n^2)\),我们直接进行组合处理. 考虑在\(p\)这个位置,左边有\(l\)个(,右边有\(r\)个),左边有\(l\)个问号,右边有\(r\)个问号. 这个位置的贡献为 ...
- Numerical Sequence (easy version)
http://codeforces.com/problemset/problem/1216/E1 E1. Numerical Sequence (easy version) time limit pe ...
- CF1264D2 Beautiful Bracket Sequence
我们枚举每两个字符的空档,统计一个空档左边有 \(l\) 个左括号, 右边有 \(r\) 个右括号,左边有 \(u\) 个问号,右边有 \(v\) 个问号. 则对于 \(p\) 的答案 \(ans_p ...
- Codeforces 1264D - Beautiful Bracket Sequence(组合数学)
Codeforces 题面传送门 & 洛谷题面传送门 首先对于这样的题目,我们应先考虑如何计算一个括号序列 \(s\) 的权值.一件非常显然的事情是,在深度最深的.是原括号序列的子序列的括号序 ...
- Ping-Pong (Easy Version)(DFS)
B. Ping-Pong (Easy Version) time limit per test 2 seconds memory limit per test 256 megabytes input ...
- CF1225B1 TV Subscriptions (Easy Version)
CF1225B1 TV Subscriptions (Easy Version) 洛谷评测传送门 题目描述 The only difference between easy and hard vers ...
- UESTC 1546 Bracket Sequence
Bracket Sequence Time Limit: 3000MS Memory Limit: 65536KB 64 ...
- CF#138 div 1 A. Bracket Sequence
[#138 div 1 A. Bracket Sequence] [原题] A. Bracket Sequence time limit per test 2 seconds memory limit ...
- CodeForces 670E Correct Bracket Sequence Editor(list和迭代器函数模拟)
E. Correct Bracket Sequence Editor time limit per test 2 seconds memory limit per test 256 megabytes ...
随机推荐
- Servlet学习一(Servlet的使用流程)
一.servlet运行流程 运行流程:浏览器发送请求到服务器,服务器根据url地址在webapps中寻找对应的项目文件夹然后再web.xml中检索对应的servlet,并进行调用二.servlet类写 ...
- linux:桌面切换
永久更改 字符模式:multi-user.target 图形模式:graphical.target systemctl get-default #查看默认模式 systemctl set-defaul ...
- CSP/S 2020 退役记
上一次的AFO记 上上次的AFO记 Day -INF 一条咸鱼的垂死挣扎. RP+=INF Day 0 出发辣. 早上来到机房,带上了准备的面包和泡面....然而后来嫌太占地方就没拿...草了. 而且 ...
- 2021CCPC河南省赛(部分代码待更)
最终A了8道题, 喜提一金, 也是在意料之中. 第一次三个队友集中在一起打比赛, 也体验了一下线下的氛围, 还是比较赞的, 自己也不是说毫无作用, 帮助团队做了几道题, 还是挺满意的. 1002 em ...
- uni-app使用wx-canvas实现微信小程序上显示地图map和坐标geo
源码 <template> <view class="echart-box"> <canvas class="ec-canvas" ...
- 大数据中必须要掌握的 Flink SQL 详细剖析
Flink SQL 是 Flink 实时计算为简化计算模型,降低用户使用实时计算门槛而设计的一套符合标准 SQL 语义的开发语言. 自 2015 年开始,阿里巴巴开始调研开源流计算引擎,最终决定基于 ...
- Centos 7 成功安装 dosbox 解决 "error: expected primary-expression before ‘,’ token" 错误
dosbox-0.74 bug 修复版下载: http://download.csdn.net/detail/yangbodong22011/9663271 注意:这篇博客解决了下面这个问题,如果你也 ...
- istio基础详解
1.Istio介绍? 官方文档:https://istio.io/docs/concepts/what-is-istio/ 中文官方文档:https://istio.io/zh/docs/concep ...
- 输入指令npx webpack-dev-server报错:Error: Cannot find module ‘webpack-cli/bin/config-yargs‘的解决方法
输入指令npx webpack-dev-server报错:Error: Cannot find module 'webpack-cli/bin/config-yargs'的解决方法 输入指令:npx ...
- Android-ION内存管理简介
ION内存管理简介 https://www.jianshu.com/p/4f681f6ddc3b http://kernel.meizu.com/memory%20management%20-%20i ...