nyoj 15 括號匹配(二)
阿新 • • 發佈:2019-02-20
括號匹配(二)
時間限制: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; }