NWU_ACM

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 1 //#include <bits/stdc++.h>
 2 #include<iostream>
 3 #include<stdio.h>
 4 #include<string.h>
 5 using namespace std;
 6 char s[128];
 7 int dp[128][128];
 8 int n;
 9 
10 int dfs(int l,int r)
11 {
12     if(dp[l][r]!=-1)
13         return dp[l][r];
14     if(l==r)
15         return dp[l][r]=0;
16     if(l+1==r){
17         if(s[l]=='('&&s[r]==')')
18             return dp[l][r]=2;
19         if(s[l]=='['&&s[r]==']')
20             return dp[l][r]=2;
21     }
22     //int maxx=0;
23     if(s[l]=='('&&s[r]==')')
24         //maxx=max(maxx,2+rec(l+1,r-1));
25         dp[l][r] = max(dp[l][r], dfs(l + 1, r - 1) + 2);
26     if(s[l]=='['&&s[r]==']')
27        // maxx=max(maxx,2+rec(l+1,r-1));
28         dp[l][r] = max(dp[l][r], dfs(l + 1, r - 1) + 2);
29     for(int k=l;k<=r-1;++k)
30         //maxx=max(maxx,rec(l,k)+rec(k+1,r));
31         dp[l][r] = max(dp[l][r], dfs(l, k) + dfs(k + 1, r));
32     return dp[l][r];
33 }
34 
35 int main()
36 {
37     while(scanf("%s",s)==1){
38         if(s[0]=='e')
39             break;
40         memset(dp,-1,sizeof(dp));
41         n=strlen(s);
42         printf("%d\n",dfs(0,strlen(s)-1));
43     }
44     return 0;
45 }
View Code

 

posted on 2017-04-20 21:06  NWU_ACM  阅读(99)  评论(0编辑  收藏  举报