思路:

似乎和某次培训的题很像啊。。。

将左括号记为1,右括号记为-1,那么最终一定加和为0,然后再求最小前缀和。

用dp解决即可。

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 1000010;
const int mod = 1e9+7;
char s[maxn];
int n,m;
ll sum;
int mn;
ll dp[2010][2010];
ll ans;
int main () {
#ifdef ONLINE_JUDGE
freopen("bracket.in","r",stdin);
freopen("bracket.out","w",stdout);
#endif
scanf("%d %d",&n,&m);
scanf("%s",s+1);
for(int i = 1;i <= m; ++i) {
if(i == 1) mn = (s[i] == '(' ? 1 : -1);
sum += (s[i] == '(' ? 1 : -1);
mn = min(mn,(int)sum);
}
dp[0][0] = 1;
for(int i = 1;i <= n - m; ++i) {
for(int j = 0;j <= i; ++j) {
if(!j) {
dp[i][j] = dp[i - 1][j + 1];
}
else dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j + 1]) % mod;
}
}
for(int i = 0;i <= n - m; ++i) {
for(int j = 0;j <= i; ++j) {
if(j + sum <= n - m && j + mn >= 0) {
ans = (ans + dp[i][j] * dp[n - m - i][j + sum])%mod;
}
}
}
cout<<ans<<endl;
return 0;
}

[JZOJ 5804] 简单的序列的更多相关文章

  1. 简单DNA序列组装(非循环子图)

    生物信息学原理作业第四弹:DNA序列组装(非循环子图) 原理:生物信息学(孙啸) 大致思想: 1. 这个算法理解细节理解比较困难,建议看孙啸的生物信息学相关章节. 2. 算法要求所有序列覆盖整个目标D ...

  2. NOIP模拟测试「简单的区间·简单的玄学·简单的填数·简单的序列」

    简单的区间 $update$ 终于$AC$了 找到$(sum[r]+sum[l](sum表示以中间点为基准的sum)-mx)\%k==0$的点 注意这里$sum$表示是以$mid$为基准点,(即$su ...

  3. Oracle简单的序列应用

    1.序列的简单作用 1.需要自增或自减一个值的时候. 2.为表中的列自动产生值. 3.由用户创建数据库对象,并可由多个用户共享. 4.一般用于主键或唯一列. 2.创建序列的语法及解析 create s ...

  4. [CSP-S模拟测试]:简单的序列(DP)

    题目描述 从前有个括号序列$s$,满足$|s|=m$.你需要统计括号序列对$(p,q)$的数量. 其中$(p,q)$满足$|p|+|s|+|q|=n$,且$p+s+q$是一个合法的括号序列. 输入格式 ...

  5. [JZOJ 5811] 简单的填数

    题意:自己搜吧... 思路: 记二元组\((x,l)\)表示当前为\(x\)且之前有\(l\)个连续数与\(x\)相同. 并且维护up和low数组表示取到最大/最小值时,连续序列的长度. 正一遍,反一 ...

  6. [JZOJ 5810] 简单的玄学

    思路: 就是考虑一个结论 对于\(1<=x<=2^n\),那么\(x\)与\(2^n - x\)中的2的个数相等. 证明: 我们将\(x\)表示成\(2^k*b\),那么\(2^n - x ...

  7. JZOJ5804. 【2018.08.12提高A组模拟】简单的序列

    性质:每个位置的前缀和必须大于0,总和=0.以此dp即可. #include <iostream> #include <cstdio> #include <cstring ...

  8. [JZOJ 5807] 简单的区间

    题目: 求有多少组二元组\((l,r)\)使得:\(1<=l<=r<=n,k|f(l,r)\) \(f(l,r) = \sum_{i=l}^{r}a_i - max_{i=l}^{r ...

  9. MySQL 序列使用

    MySQL 序列使用 MySQL序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现. 本章我们将介绍如 ...

随机推荐

  1. 【JZOJ1914】【BZOJ2125】最短路

    description 给一个N个点M条边的连通无向图,满足每条边最多属于一个环,有Q组询问,每次询问两点之间的最短路径. analysis 建出圆方树后,可以知道仙人掌上每一个方点连着的边双其实就是 ...

  2. Boost Download

    { //https://www.boost.org/users/history/version_1_71_0.html }

  3. 「CTS2019 | CTSC2019」随机立方体 解题报告

    「CTS2019 | CTSC2019」随机立方体 据说这是签到题,但是我计数学的实在有点差,这里认真说一说. 我们先考虑一些事实 如果我们在位置\((x_0,y_0,z_0)\)钦定了一个极大数\( ...

  4. 【LeetCode 1】两数之和

    描述 [题解] 用个map的话就是O(N)级别的了. [代码] class Solution { public: unordered_map<int,int> mymap; vector& ...

  5. 【Flutter学习】之VSCode下Flutter常用终端命令行

    Flutter 常用命令行 相关项目操作 查看Flutter版本 查看当前版本 flutter --version 查看所有版本 flutter version 打印所有命令行用法信息 flutter ...

  6. Vue2.0源码思维导图-------------Vue 构造函数、原型、静态属性和方法

    已经用vue有一段时间了,最近花一些时间去阅读Vue源码,看源码的同时便于理解,会用工具画下结构图. 今天把最近看到总结的结构图分享出来.希望可以帮助和其他同学一起进步.当然里边可能存在一些疏漏的,或 ...

  7. docker安装(4)

    centos6 docker安装 wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-6.repo yum install -y ...

  8. codeforces 447E or 446C 线段树 + fib性质或二次剩余性质

    CF446C题意: 给你一个数列\(a_i\),有两种操作:区间求和:\(\sum_{i=l}^{r}(a[i]+=fib[i-l+1])\).\(fib\)是斐波那契数列. 思路 (一) codef ...

  9. 转-C++之手写strcpy

    转自:strcpy函数的实现 知strcpy函数的原型是: char *strcpy(char *dst, const char *src); 实现strcpy函数 解释为什么要返回char * 假如 ...

  10. 洛谷 P4196 [CQOI2006]凸多边形 (半平面交)

    题目链接:P4196 [CQOI2006]凸多边形 题意 给定 \(n\) 个凸多边形,求它们相交的面积. 思路 半平面交 半平面交的模板题. 代码 #include <bits/stdc++. ...