[luoguP1944] 最长括号匹配_NOI导刊2009提高(1)
非常傻的DP。
f[i]表示末尾是i的最长的字串
#include <cstdio> #include <cstring> #define N 1000001 int f[N]; char s[N]; int n, p, ans; int main() { int i; scanf("%s", s + 1); n = strlen(s + 1); for(i = 1; i <= n; i++) { if((s[i - 1 - f[i - 1]] == '(' && s[i] == ')') || (s[i - 1 - f[i - 1]] == '[' && s[i] == ']')) { f[i] = f[i - 1] + 2; f[i] += f[i - f[i]]; } if(ans < f[i]) ans = f[i], p = i; } for(i = p - f[p] + 1; i <= p; i++) printf("%c", s[i]); return 0; }