Famil Door and Brackets

Time Limit: 20 Sec  Memory Limit: 512 MB

Description

  

Input

  

Output

  

Sample Input

  4 1
  (

Sample Output

  4

HINT

  

Solution

  显然,我们考虑运用DP。先求出 f[i][j] 表示 长度为 i 的括号序列,“)” 比 “(” 多 j 个的方案时刻保证 j >= 0)。

  然后我们考虑怎样获得答案。先预处理出L,R表示将读入的括号序列消去若干对之后剩下的“)” “(”个数(消去吼显然形如“))(((”)。

  那么我们左边要加入的就要至少多R个“(”,右边类似。

  但是显然,我也可以左边再多填几个“(”,右边再多填几个“)”。

  那么我们就可以 枚举左边填 i 个括号(则右边填 need - i 个),左边多填 num 个“(”(则右边多填 num 个“)”)。

  然后统计答案即可。

Code

 #include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
typedef long long s64; const int ONE = ;
const int MOD = 1e9 + ;
const int Base = ; int n, m, need;
char s[ONE];
int f[][];
int Ans;
int stk[ONE], top;
int L = , R = ; int get()
{
int res;char c;
while( (c=getchar())< || c> );
res=c-;
while( (c=getchar())>= && c<= )
res=res*+c-;
return res;
} void Deal_f()
{
f[][] = ;
for(int i = ; i <= need; i++)
for(int j = ; j <= need; j++)
{
f[i][j] = (f[i][j] + f[i - ][j + ]) % MOD;
if(j >= ) f[i][j] = (f[i][j] + f[i - ][j - ]) % MOD;
}
} void Deal_LR()
{
for(int i = ; i <= m; i++)
{
if(s[i] == ')' && stk[top] == '(') top--;
else stk[++top] = s[i];
} for(int i = ; i <= top; i++)
if(stk[i] == '(') L++;
else R++;
} int main()
{
n = get(); m = get(); need = n - m;
scanf("%s", s + ); Deal_f(), Deal_LR(); Ans = ;
for(int i = ; i <= need; i++)
for(int num = ; num <= need; num++)//left's L
if(R + num < && L + num < )
Ans = (Ans + (s64)f[i][R + num] * f[need - i][L + num] % MOD) % MOD; printf("%d", Ans);
}
  • 视图代码

最新文章

  1. WPF - 属性系统 (2 of 4)
  2. 关于 redis、memcache、mongoDB 的对比(转载)
  3. BizTalk开发系列(二) &quot;Hello World&quot; 程序搬运文件
  4. iOS简易图片选择器 (图片可多选,仿微信)
  5. DNS主从TSIG加密传输
  6. MATLAB代码加密生成.p文件
  7. Android官方提供的支持不同屏幕大小的全部方法
  8. 将表中null值替换成想要的值、查询某一列值为null
  9. Java JVM 类的连接与初始化 [ 转载 ]
  10. 小程序开发--template模板
  11. Spring.net的一些感悟
  12. io系列之常用流二
  13. DataTable.Select 处理关联表数据
  14. BZOJ4127Abs——树链剖分+线段树
  15. Mysql的timestamp字段默认值设置问题
  16. Spring IOC(四)FactoryBean
  17. 「PKUWC2019」拓扑序计数(状压dp)
  18. Implement Queue by Two Stacks &amp; Implement Stack using Queues
  19. Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) E. Tree Folding 拓扑排序
  20. 使用 IntraWeb (11) - 基本控件之 TIWButton

热门文章

  1. c++SDK c#调用_疑难杂症
  2. iOS-【UIDynamic-UIKit动力学】
  3. NSDate常用的日期操作
  4. PHPCMS登录后不是进入会员中心而是转入登录前页最新代码
  5. Java-通过比较throw与throws来阐述抛出异常
  6. java基础简介
  7. javabean 参数收集 设置属性 设置不同级别的域对象的属性 默认存储在pagecontext中
  8. 【题解】CQOI2012局部最小值
  9. [CF785E]Anton and Permutation
  10. HDOJ.1010 Tempter of the Bone (DFS)