首页 > 代码库 > hdu 2955
hdu 2955
求最大括号匹配
和上一题回文序列差不多,主要差别在于()()()这个样例上,因此需要在求区间过程再加一步,具体见代码
Sample Input
((()))()()()([]]))[)(([][][)end
Sample Output
66406
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。