Advertisement
Guest User

Untitled

a guest
Dec 16th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.63 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int dp[1010][1010];
  5. char w[1010];
  6.  
  7. int cost(char l, char r){
  8.     int val = 0;
  9.     if(l == ')' || l == ']') val++;
  10.     if(r == '(' || r == '[') val++;
  11.     if(abs(l - r) > 2) val++;
  12.     return val;
  13. }
  14.  
  15. int recur(int l, int r){
  16.     if(dp[l][r] != -1) return dp[l][r];
  17.     if(r-l+1 == 2) return dp[l][r] = cost(w[l], w[r]);
  18.     int Min = recur(l+1, r-1) + cost(w[l], w[r]);
  19.     for(int i=l+1 ; i<r ; i+=2) Min = min(Min, recur(l, i) + recur(i+1, r));
  20.     return dp[l][r] = Min;
  21. }
  22.  
  23. int main(){
  24.     scanf(" %s",w+1);
  25.     int n = strlen(w+1);
  26.     memset(dp, -1, sizeof dp);
  27.     printf("%d\n",recur(1, n));
  28.     return 0;
  29. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement