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 main(){
- scanf(" %s",w+1);
- int n = strlen(w+1);
- for(int i=1 ; i<n ; i++) dp[i][i+1] = cost(w[i], w[i+1]);
- for(int sz=4 ; sz<=n ; sz+=2){
- for(int i=1 ; i<=n ; i++){
- int j=i+sz-1;
- if(j > n) break ;
- dp[i][j] = dp[i+1][j-1] + cost(w[i], w[j]);
- for(int k=i+1 ; k<j ; k+=2){
- dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j]);
- }
- }
- }
- printf("%d\n",dp[1][n]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement