-->
当前位置:首页 > 题库 > 正文内容

编程题:括号序列--easy version

Luz3年前 (2022-07-31)题库429
*原题来自CSP-S 2021 本题略有改动*

给定一个长度为$n$的括号序列,有些位置确定了,有些位置没有确定,未确定的位置用?表示,求合法括号序列有多少。

一个合法括号序列满足下列条件:

1.()是合法的括号序列

2.若 $S$ 是合法的括号序列,那么$SS, (S)$也是合法的括号序列


### 输入格式:

第一行输入一个正整数$n(1 \leq n \leq 2000)$

第二行输入一个长度为$n$的字符串,表示括号序列。数据保证字符串只由(,),?组成。

### 输出格式:

输出一个非负整数表示答案对 $10^9+7$ 取模的结果。

### 输入样例1:


in
4
(??)


### 输出样例1:


out
2


给定字符串可能形成下面两种合法的括号序列
(())
()()

### 输入样例2:


in
5
?????


### 输出样例2:


out
0


### 输入样例3:


in
6
(????)


### 输出样例3:


out
5


有以下五种情况

((()))
(()())
()()()
(())()
()(())





答案:若无答案欢迎评论

用$dp_{i,j}$表示前$i$个字符中还有$j$个(需要匹配的答案的数量。

若$s[i]$可以为(,那么$dp_{i,j} += dp_{i - 1, j - 1}$

若$s[i]$可以为),那么$dp_{i,j} += dp_{i - 1, j + 1}$

最终答案就是$dp_{n,0}$

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。