1 #include<bits/stdc++.h> 2 using namespace std; 3 char str[102]; 4 int dp[1020][1020]; 5 int n; 6 bool check(int i,int j) 7 { 8 if((str[i-1]=='('&&str[j-1]==')')||(str[i-1]=='['&&str[j-1]==']')) 9 return true; 10 return false; 11 } 12 int main() 13 { 14 gets(str); 15 n=strlen(str); 16 for(int i=1;i<=n;i++) 17 { 18 dp[i][i]=1; 19 } 20 for(int len=2;len<=n;len++) 21 { 22 for(int st=1;st<=n*2-len+1;st++) 23 { 24 int ed=st+len-1; 25 dp[st][ed]=INT_MAX; 26 for(int bk=st;bk<=ed;bk++) 27 { 28 dp[st][ed]=min(dp[st][ed],dp[st][bk]+dp[bk+1][ed]); 29 } 30 if(check(st,ed)) dp[st][ed]=min(dp[st][ed],dp[st+1][ed-1]); 31 } 32 } 33 cout<<dp[1][n]; 34 }