题意:
分析:
代码:
#include<iostream> #include<algorithm> #include<cstring> using namespace std; char s[102]; int dp[102][102]; int main() { int i, j, k; int len; int delta; while (~scanf("%s", s+1) && s[1]!='e') { memset(dp, 0, sizeof(dp)); len = strlen(s+1); for (delta = 2; delta <= len; delta++) { for (i = 1; i <= len+1-delta; i++) { j = i + delta - 1; if ((s[i] == '(' && s[j] == ')') || (s[i] == '[' && s[j] == ']')) dp[i][j] = dp[i + 1][j - 1] + 2; for (k = i;k<j; k++) dp[i][j] = max(dp[i][j], dp[i][k] + dp[k + 1][j]); } } printf("%d\n", dp[1][len]); } return 0; }