#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
char s[110];
int dp[110][110];
while(scanf("%s", s) != EOF && s[0] != 'e')
{
memset(dp, 0, sizeof(dp));
int n = strlen(s);
for(int len = 2; len <= n; len ++)
{
for(int l = 0;l+len-1 < n;l ++)
{
int r = l+len-1;
dp[l][r] = dp[l+1][r];
for(int k = l+1; k <= r; k ++)
{
if((s[l] == '(' && s[k] == ')') || (s[l] == '[' && s[k] == ']'))
{
dp[l][r] = max(dp[l][r], dp[l+1][k-1]+dp[k+1][r]+2);
}
}
}
}
printf("%d\n", dp[0][n-1]);
}
return 0;
}
POJ 2955(区间DP)
最新推荐文章于 2021-11-16 22:06:01 发布