基础区间dp
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[107][107];
char s[107];
int main()
{
while(scanf("%s",s)!=EOF&&s[0]!='e')
{
int len=strlen(s);
memset(dp,0,sizeof(dp));//清数组
for(int i=len-2;i>=0;i--)
for(int j=i+1;j<len;j++)
{
dp[i][j]=dp[i+1][j];
for(int k=i+1;k<=j;k++)
{
if(s[i]=='('&&s[k]==')' || s[i]=='['&&s[k]==']')
dp[i][j] = max( dp[i][j], dp[i+1][k-1]+dp[k+1][j]+2);
}
}
printf("%d\n",dp[0][len-1]);
}
}