好久没写过这样的线性dp了,其实方程很简单。。。就是太懒了没画草稿纸,才写错方程了吧。。。wa了好几发,惩罚自己写个分享
char s[N];
int f[N];
void solve()
{
cin >> (s + 1);
int n = strlen(s + 1);
for (int i = 1; i <= n; i++)
{
if (s[i] == '(' || s[i] == '[') continue;
else
{
if ( (s[i - f[i - 1] - 1] == '[' && s[i] == ']')
|| (s[i - f[i - 1] - 1] == '(' && s[i] == ')') )
{
f[i] = f[i - 1] + f[i - f[i - 1] - 1 - 1] + 2;
}
}
}
int ans = *max_element(f + 1, f + 1 + n);
for (int i = 1; i <= n; i++)
{
if (ans == f[i])
{
for (int j = i - ans + 1; j <= i; j++) cout << s[j];
return;
}
}
}