#include <stdio.h> #include <string.h> int Min(int a, int b) { return a<b?a:b; } int arr[10][10]; int M(int i, int j, char s[]) { int k; if (i == j) return 1; if (i > j) return 0; if (arr[i][j] != -1) return arr[i][j]; int ans = 99999999; if ((s[i] == '(' && s[j] == ')') || (s[i] == '[' && s[j] == ']')) { ans = Min(ans, M(i+1, j-1, s)); arr[i][j] = ans; } if (s[i] == '(' || s[i] == '[') { ans = Min(ans, M(i+1, j, s)+1); arr[i][j] = ans; } if (s[i] == ')' || s[i] == '[') { ans = Min(ans, M(i, j-1, s)+1); arr[i][j] = ans; } for (k=i;k<=j;k++) { ans = Min(ans, M(i, k, s) + M(k+1, j, s)); arr[i][j] = ans; } ret