[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;
}

  

posted @ 2017-08-09 20:30  zht467  阅读(140)  评论(0编辑  收藏  举报