码迷,mamicode.com
首页 > 其他好文 > 详细

TOPCODER SRM 686 div2 1000

时间:2016-05-27 21:41:11      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

// TOPCODER SRM 686 div2 1000

Problem Statement

给出一个至多长 100 的字符串,仅包含 (),问其中有多少个不重复的,合法的括号子序列。

子序列可以不连续;合法即括号序列的合法;答案模 1,000,000,007。

Examples

"(())("
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

Solution

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

Code

  1. public class BracketSequenceDiv2
  2. static final int MOD = (int) 1e9 + 7
  3.  
  4. int modAdd(int a, int b)
  5. int sum = a + b; 
  6. if (sum >= MOD) { 
  7. sum -= MOD; 

  8. return sum; 

  9.  
  10. public int count(String str)
  11. int n = str.length(); 
  12. int[][][] dp = new int[n + 1][n + 1][2]; 
  13.  
  14. for (int i = 1; i <= n; ++i) { 
  15. char ch = str.charAt(i - 1); 
  16. if (ch == ‘(‘) { 
  17. dp[i][1][0] = modAdd(dp[i - 1][0][0], dp[i - 1][0][1]); 
  18. dp[i][1][0] = modAdd(dp[i][1][0], 1); 
  19. for (int j = 2; j <= i; ++j) { 
  20. dp[i][j][0] = modAdd(dp[i - 1][j - 1][0], 
  21. dp[i - 1][j - 1][1]); 

  22. for (int j = 0; j <= i; ++j) { 
  23. dp[i][j][1] = dp[i - 1][j][1]; 


  24. else { // ch == ‘)‘ 
  25. for (int j = 0; j < i; ++j) { 
  26. dp[i][j][1] = modAdd(dp[i - 1][j + 1][0], 
  27. dp[i - 1][j + 1][1]); 

  28. for (int j = 0; j <= i; ++j) { 
  29. dp[i][j][0] = dp[i - 1][j][0]; 



  30. return dp[n][0][1]; 


TOPCODER SRM 686 div2 1000

标签:

原文地址:http://www.cnblogs.com/gu-castle/p/5535980.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!