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

hdu 2955

时间:2015-02-01 16:06:12      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

求最大括号匹配

和上一题回文序列差不多,主要差别在于()()()这个样例上,因此需要在求区间过程再加一步,具体见代码

Sample Input

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

Sample Output

6
6
4
0
6

 

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 using namespace std;
 5 int dp[1001][1001];
 6 char a[1001];
 7 int n;
 8 int main()
 9 {
10     //freopen("1.in","r",stdin);
11     while(scanf("%s",a+1)!=EOF)
12     {
13         if(a[1]==e)   break;
14         int n=strlen(a+1);
15         memset(dp,0,sizeof(dp));
16         for(int len=1;len<n;len++) {
17             for (int i=1;i+len<=n;i++){
18                 int j=i+len;
19                 if((a[i]==(&&a[j]==))||(a[i]==[&&a[j]==]))
20                     dp[i][j]=dp[i+1][j-1]+2;
21                 for(int t=i;t<=j;t++)
22                 {
23                     dp[i][j]=max(dp[i][t]+dp[t+1][j],dp[i][j]);
24                 }
25             }
26         }
27         printf("%d\n",dp[1][n]);
28     }
29     return 0;
30 }

 

hdu 2955

标签:

原文地址:http://www.cnblogs.com/cnblogs321114287/p/4265592.html

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