设为首页 加入收藏

TOP

poj2955Brackets(区间DP)
2015-07-20 18:06:03 来源: 作者: 【 】 浏览:4
Tags:poj2955Brackets 区间

Description

We give the following inductive definition of a “regular brackets” sequence:

the empty sequence is a regular brackets sequence,if s is a regular brackets sequence, then ( s) and [ s] are regular brackets sequences, andif a and b are regular brackets sequences, then ab is a regular brackets sequence.no other sequence is a regular brackets sequence

For instance, all of the following character sequences are regular brackets sequences:

(), [], (()), ()[], ()[()]

while the following character sequences are not:

(, ], )(, ([)], ([(]

Given a brackets sequence of characters a1a2an, your goal is to find the length of the longest regular brackets sequence that is a subsequence of s. That is, you wish to find the largest m such that for indices i1, i2, …, im where 1 ≤ i1 < i2 < … < imn, ai1ai2 … aim is a regular brackets sequence.

Given the initial sequence ([([]])], the longest regular brackets subsequence is [([])].

Input

The input test file will contain multiple test cases. Each input test case consists of a single line containing only the characters (, ), [, and ]; each input test will have length between 1 and 100, inclusive. The end-of-file is marked by a line containing the word “end” and should not be processed.

Output

For each input case, the program should print the length of the longest possible regular brackets subsequence on a single line.

Sample Input

((()))
()()()
([]])
)[)(
([][][)
end

Sample Output

6
6
4
0
6
dp[i][j]表示在区间i到j匹配的最大数。
#include
   
    
#include
    
      int max(int a,int b) { return a>b?a:b; } int main() { int dp[105][105]; char str[105]; while(scanf("%s",str)>0&&strcmp(str,"end")!=0) { int len=strlen(str); memset(dp,0,sizeof(dp)); for(int l=1;l
     
      

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Codeforces Round #257 (Div. 2)B.. 下一篇POJ 1837 Balance

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: