求最多能匹配的括号数*2
#include "stdio.h"
#include "string.h"
int max(int a,int b)
{
if (a<b) return b;
else return a;
}
int judge(char a,char b)
{
if (a=='(' && b==')') return 1;
if (a=='[' && b==']') return 1;
return 0;
}
int main()
{
int i,j,s,e,n,k;
char str[110];
int dp[110][110],ans[110];
while (gets(str))
{
if (str[0]=='e') break;
memset(dp,0,sizeof(dp));
n=strlen(str);
for (i=0;i<n-1;i++)
if (judge(str[i],str[i+1])==1)
dp[i][i+1]=2;
for (i=3;i<=n;i++)
for (j=0;j<n-i+1;j++)
{
s=j; e=i+j-1;
if (judge(str[s],str[e])==1) dp[s][e]=max(dp[s][e],2+dp[s+1][e-1]);
for (k=s;k<=e-1;k++)
dp[s][e]=max(dp[s][e],dp[s][k]+dp[k+1][e]);
}
memset(ans,0,sizeof(ans));
for (i=1;i<n;i++)
{
ans[i]=dp[0][i];
for (j=1;j<=i;j++)
{
ans[i]=max(ans[i],ans[j-1]+dp[j][i]);
}
}
printf("%d\n",ans[n-1]);
}
return 0;
}