给一个括号序列,求有几个括号是匹配的。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 char str[111]; 6 int d[111][111]; 7 int main(){ 8 while(~scanf("%s",str) && str[0]!=‘e‘){ 9 int n=strlen(str); 10 memset(d,0,sizeof(d)); 11 for(int len=2; len<=n; ++len){ 12 for(int i=0; i+len<=n; ++i){ 13 if(str[i]==‘(‘&&str[i+len-1]==‘)‘ || str[i]==‘[‘&&str[i+len-1]==‘]‘) d[i][i+len-1]=d[i+1][i+len-2]+2; 14 for(int j=0; j<len-1; ++j) d[i][i+len-1]=max(d[i][i+len-1],d[i][i+j]+d[i+j+1][i+len-1]); 15 } 16 } 17 printf("%d\n",d[0][n-1]); 18 } 19 return 0; 20 }
原文:http://www.cnblogs.com/WABoss/p/5215198.html