https://vjudge.net/contest/226480#problem/B
参考博客:https://blog.csdn.net/limhhhhh/article/details/50599551
#include<iostream>
#include<cstring>
using namespace std;
int solve(char a,char b)
{
if((a=='('&&b==')')||(a=='['&&b==']'))
return 1;
else
return 0;
}
int main()
{
char s[110];
while(cin>>s)
{
if(s[0]=='e')
break;
int len=strlen(s);
int dp[110][110];
memset(dp,0,sizeof(dp));
for(int i=0;i<len;i++)
{
if(solve(s[i],s[i+1]))
dp[i][i+1]=2;
}
for(int i=3;i<=len;i++)
{
for(int j=0;j+i-1<len;j++)
{
if(solve(s[j],s[j+i-1]))
dp[j][j+i-1]=dp[j+1][j+i-2]+2;
for(int k=j;k<i+j-1;k++)
{
dp[j][j+i-1]=max(dp[j][i+j-1],dp[j][k]+dp[k+1][j+i-1]);
}
}
}
cout<<dp[0][len-1]<<endl;
}
return 0;
}