1. 程式人生 > >nyoj 15 括號匹配(二)

nyoj 15 括號匹配(二)

括號匹配(二)

時間限制:1000 ms  |  記憶體限制:65535 KB 難度:6
描述
給你一個字串,裡面只包含"(",")","[","]"四種符號,請問你需要至少新增多少個括號才能使這些括號匹配起來。
如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的
輸入
第一行輸入一個正整數N,表示測試資料組數(N<=10)
每組測試資料都只有一行,是一個字串S,S中只包含以上所說的四種字元,S的長度不超過100
輸出
對於每組測試資料都輸出一個正整數,表示最少需要新增的括號的數量。每組測試輸出佔一行
樣例輸入
4
[]
([])[]
((]
([)]
樣例輸出
0
0
3

2

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int dp[105][105];
char s[105];
int main()
{
	int n,i,j,k;
	cin>>n;
	while(n--)
	{
		cin>>s;
		int len=strlen(s);
		memset(dp,0,sizeof(dp));
		for(i=0;i<len;i++)
		dp[i][i]=1;
		for(i=1;i<len;i++)
			for(j=i;j>=0;j--)
			{
				dp[j][i]=dp[j][i-1]+1;
				for(k=i-1;k>=j;k--)
				if(s[k]+1==s[i]||s[k]+2==s[i])
				dp[j][i]=min(dp[j][i],dp[j][k-1]+dp[k+1][i-1]);
			}
		printf("%d\n",dp[0][len-1]);
	}
	return 0;
}