Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- int dp[1010][1010];
- char w[1010];
- int cost(char l, char r){
- int val = 0;
- if(l == ')' || l == ']') val++;
- if(r == '(' || r == '[') val++;
- if(abs(l - r) > 2) val++;
- return val;
- }
- int recur(int l, int r){
- if(dp[l][r] != -1) return dp[l][r];
- if(r-l+1 == 2) return dp[l][r] = cost(w[l], w[r]);
- int Min = recur(l+1, r-1) + cost(w[l], w[r]);
- for(int i=l+1 ; i<r ; i+=2) Min = min(Min, recur(l, i) + recur(i+1, r));
- return dp[l][r] = Min;
- }
- int main(){
- scanf(" %s",w+1);
- int n = strlen(w+1);
- memset(dp, -1, sizeof dp);
- printf("%d\n",recur(1, n));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement