传送门

分析

我们将左括号看作 1,右括号看作 -1,则一个合法的括号序列需要满足:
*所有括号的总和为 0
*每个前缀和均不小于0
我们先统计出串 s 的总和 a 以及最小的前缀和 b,然后枚举串 p 的长度 i 以及总和 j, 考虑到需要满足第二个条件,那么 j 需要满足 j+b>=0。记 f[ i ][ j ] 为长度为 i ,总和为 j 的括号序列数量,此时 p 的方案数为 f[ i ][ j ]q 的方案数为 f[ n - m - i ][ j + a ],将它们的乘积计入答案即可。
f 可以通过一个简单的 DP 求出,时空复杂度均为 O((n-m)^2)

#include<bits/stdc++.h>
#define ll long long
#define N 100005
#define M 2005
#define mod 1000000007
using namespace std;
int n,m,k,u,ans,f[M][M];
char s[N];
int main(){scanf("%d%d",&n,&m);scanf("%s",s+1);for(int i=1;i<=m;i++){u+=s[i]=='(' ? 1:-1;k=min(k,u);}f[0][0]=1;for(int i=1;i<=n-m;i++)for(int j=0;j<=i;j++){f[i][j]=0;if(j>0)f[i][j]=(f[i][j]+f[i-1][j-1])%mod;if(j<i-1)f[i][j]=(f[i][j]+f[i-1][j+1])%mod;}for(int i=-k;i<=n-m;i++)for(int j=-k;j<=i;j++)if(u+j<=n-m-i) ans=(ans+(ll)f[i][j]*f[n-m-i][u+j])%mod;printf("%d",ans);return 0;
}

Luo's oj P1916 简单的序列(bracket)相关推荐

  1. Luo's oj P1918 简单的操作

    传送门 分析 (直接帖题解) 先考虑连通图的情况. 首先如果原图不是二分图,显然无解.因为对于一个长度大于 3 的奇环,如果合并环上任意两个不相邻的点,一定会生成一个更小的奇环,最终会剩下一个三元环, ...

  2. DL之RNN:基于TF利用RNN实现简单的序列数据类型(DIY序列数据集)的二分类(线性序列随机序列)

    DL之RNN:基于TF利用RNN实现简单的序列数据类型(DIY序列数据集)的二分类(线性序列&随机序列) 目录 序列数据类型&输出结果 设计思路 序列数据类型&输出结果 1.t ...

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

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

  4. python如何判断列表是否为空_python简单判断序列是否为空的方法

    python简单判断序列是否为空的方法 本文实例讲述了python简单判断序列是否为空的方法.分享给大家供大家参考.具体如下: 假设有如下序列: m1 = [] m2 = () m3 = {} 判断他 ...

  5. [dp] Jzoj P5804 简单的序列

    Description 从前有个括号序列 s,满足 |s| = m.你需要统计括号序列对 (p, q) 的数量. 其中 (p, q) 满足 |p| + |s| + |q| = n,且 p + s + ...

  6. [DP]JZOJ 5804 简单的序列

    Description 从前有个括号序列 s,满足 |s| = m.你需要统计括号序列对 (p, q) 的数量. 其中 (p, q) 满足 |p| + |s| + |q| = n,且 p + s + ...

  7. 简单创建序列和触发器示例

    自定义序列(sequence): CREATE SEQUENCE example_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOM ...

  8. [JZOJ 5804] 简单的序列

    思路: 似乎和某次培训的题很像啊... 将左括号记为1,右括号记为-1,那么最终一定加和为0,然后再求最小前缀和. 用dp解决即可. #include <bits/stdc++.h> us ...

  9. HNUST OJ 1883 神奇的序列

    问题 D: 神奇的序列 时间限制: 1 Sec  内存限制: 128 MB 题目描述        Aurora在南宁发现了一个神奇的序列,即对于该序列的任意相邻两数之和都不是三的倍数.现在给你一个长 ...

最新文章

  1. ballgown包进行基因差异表达分析
  2. Socket网络编程(2)--服务端实现
  3. python 为什么每次代码运行时间不同-为什么你写的Python运行的那么慢呢?
  4. 一个判断字符是不是10进制数的函数------isdigit()
  5. excel去重_数据处理之EXCEL的高效技巧分享
  6. No monitoring data is available
  7. 机械硬盘4k读写速度_三星T5移动硬盘应用评测:不止够用,还很好用
  8. Google大牛涉嫌性骚扰被停职,NIPS官方致歉,传闻多时的AI圈黑幕终于被撕开
  9. Python datetime 格式化字符串:strftime()
  10. Spark(Core)
  11. 大数据之实时流处理常用框架
  12. 基于STM32音频频谱分析设计方案
  13. 报考上传照片时显示服务器错误,报考上传照片所遇问题及解决方法(转载)
  14. 信噪比db换算_DB和dBm有哪些区别 DB和dBm区别介绍【图文】
  15. ECMAScript 6基础总结
  16. C++类和C结构体类型的异同
  17. ApriTag2 检测方法
  18. string字符串转换为Date日期格式
  19. Linux aarch64交叉编译之 Google filament引擎
  20. 【flask高级】从源码深入理解flask路由之endpoint

热门文章

  1. 21 LCD1602
  2. 分享:文件加密-闪灵文件夹锁如何快速加密大数据文件
  3. 【Python爬虫必备—>Scrapy框架快速入门篇——上】
  4. 概率论与数理统计_第1章_几何概型
  5. 深度学习——名词总结篇
  6. python listnode(0)_Python,XML AttributeError:’NodeList’对象没有属性’firstChild’
  7. 最快一年通过CFA三个级别的考试!附CFA全级别机考信息
  8. java一元二次方程
  9. ubuntu20.04独显和集显切换安装英伟达驱动
  10. 超级店长是怎样炼成的?