Luo's oj P1916 简单的序列(bracket)
传送门
分析
我们将左括号看作 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)相关推荐
- Luo's oj P1918 简单的操作
传送门 分析 (直接帖题解) 先考虑连通图的情况. 首先如果原图不是二分图,显然无解.因为对于一个长度大于 3 的奇环,如果合并环上任意两个不相邻的点,一定会生成一个更小的奇环,最终会剩下一个三元环, ...
- DL之RNN:基于TF利用RNN实现简单的序列数据类型(DIY序列数据集)的二分类(线性序列随机序列)
DL之RNN:基于TF利用RNN实现简单的序列数据类型(DIY序列数据集)的二分类(线性序列&随机序列) 目录 序列数据类型&输出结果 设计思路 序列数据类型&输出结果 1.t ...
- NOIP模拟测试「简单的区间·简单的玄学·简单的填数·简单的序列」
简单的区间 $update$ 终于$AC$了 找到$(sum[r]+sum[l](sum表示以中间点为基准的sum)-mx)\%k==0$的点 注意这里$sum$表示是以$mid$为基准点,(即$su ...
- python如何判断列表是否为空_python简单判断序列是否为空的方法
python简单判断序列是否为空的方法 本文实例讲述了python简单判断序列是否为空的方法.分享给大家供大家参考.具体如下: 假设有如下序列: m1 = [] m2 = () m3 = {} 判断他 ...
- [dp] Jzoj P5804 简单的序列
Description 从前有个括号序列 s,满足 |s| = m.你需要统计括号序列对 (p, q) 的数量. 其中 (p, q) 满足 |p| + |s| + |q| = n,且 p + s + ...
- [DP]JZOJ 5804 简单的序列
Description 从前有个括号序列 s,满足 |s| = m.你需要统计括号序列对 (p, q) 的数量. 其中 (p, q) 满足 |p| + |s| + |q| = n,且 p + s + ...
- 简单创建序列和触发器示例
自定义序列(sequence): CREATE SEQUENCE example_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOM ...
- [JZOJ 5804] 简单的序列
思路: 似乎和某次培训的题很像啊... 将左括号记为1,右括号记为-1,那么最终一定加和为0,然后再求最小前缀和. 用dp解决即可. #include <bits/stdc++.h> us ...
- HNUST OJ 1883 神奇的序列
问题 D: 神奇的序列 时间限制: 1 Sec 内存限制: 128 MB 题目描述 Aurora在南宁发现了一个神奇的序列,即对于该序列的任意相邻两数之和都不是三的倍数.现在给你一个长 ...
最新文章
- ballgown包进行基因差异表达分析
- Socket网络编程(2)--服务端实现
- python 为什么每次代码运行时间不同-为什么你写的Python运行的那么慢呢?
- 一个判断字符是不是10进制数的函数------isdigit()
- excel去重_数据处理之EXCEL的高效技巧分享
- No monitoring data is available
- 机械硬盘4k读写速度_三星T5移动硬盘应用评测:不止够用,还很好用
- Google大牛涉嫌性骚扰被停职,NIPS官方致歉,传闻多时的AI圈黑幕终于被撕开
- Python datetime 格式化字符串:strftime()
- Spark(Core)
- 大数据之实时流处理常用框架
- 基于STM32音频频谱分析设计方案
- 报考上传照片时显示服务器错误,报考上传照片所遇问题及解决方法(转载)
- 信噪比db换算_DB和dBm有哪些区别 DB和dBm区别介绍【图文】
- ECMAScript 6基础总结
- C++类和C结构体类型的异同
- ApriTag2 检测方法
- string字符串转换为Date日期格式
- Linux aarch64交叉编译之 Google filament引擎
- 【flask高级】从源码深入理解flask路由之endpoint