标签:
// TOPCODER SRM 686 div2 1000
给出一个至多长 100 的字符串,仅包含 (
和 )
,问其中有多少个不重复的,合法的括号子序列。
子序列可以不连续;合法即括号序列的合法;答案模 1,000,000,007。
"(())("
Returns: 2
Correct non-empty bracket subsequences are "()" and "(())".
"())"
Returns: 1
Only "()" is suitable.
")((("
Returns: 0
There are no non-empty correct bracket subsequences.
"()()()()()()()()(())))(()()()()))())"
Returns: 364675
"()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()"
Returns: 122826009
f[i][j][c] 表示对于前 i 个字符组成的串,左括号比右括号多 j 个,并且以 c 为结尾的子序列的个数。注意这里的状态存的不是所有的子序列,在转移的时候为了让括号合法,仅转移 j >= 0 的那些状态,这个时候 f[i][j][c] 的值比所有的子序列要少,而 f[i][0][1] 就是前 i 个字符组成的串中,合法的,不重复子序列数目。
这道问题跟 CODEFROCES 645E 的模型是同一个。
http://www.cnblogs.com/gu-castle/p/5535969.html
标签:
原文地址:http://www.cnblogs.com/gu-castle/p/5535980.html