Salvens

D

Jul 29th, 2023
844
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.55 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define int long long
  6.  
  7. const long long INF = 1e18 + 7;
  8. const int MAXN = 1e2 + 100;
  9. const int N = 1e5 + 10;
  10.  
  11. array<array<int, MAXN>, MAXN> dp, p;
  12. string s;
  13.  
  14. bool match(char a, char b) {
  15.     return a == '(' && b == ')' || a == '[' && b == ']' || a == '{' && b == '}';
  16. }
  17.  
  18. void rec(int l, int r) {
  19. //    cout << l << ' ' << r << endl;
  20.     if (l > r || dp[l][r] == r - l + 1) {
  21.         return;
  22.     }
  23.     if (p[l][r] != -INF) {
  24.         rec(l, p[l][r]);
  25.         rec(p[l][r] + 1, r);
  26.     } else if (p[l][r] == -INF) {
  27.         cout << s[l];
  28.         rec(l + 1, r - 1);
  29.         cout << s[r];
  30.         return;
  31.     }
  32. }
  33.  
  34. signed main() {
  35.     ios_base::sync_with_stdio(false);
  36.     cin.tie(nullptr);
  37.     cout.tie(nullptr);
  38.     cin >> s;
  39.     int n = s.size();
  40.     for (int i = 0; i < n; ++i) {
  41.         for (int j = 0; j < n; ++j) {
  42.             dp[i][j] = INF;
  43.             p[i][j] = -INF;
  44.         }
  45.     }
  46.     for (int i = 0; i < n - 1; ++i) {
  47.         dp[i][i] = 1;
  48.         dp[i][i + 1] = 2 * (!match(s[i], s[i + 1]));
  49.     }
  50.     dp[n - 1][n - 1] = 1;
  51.     for (int len = 2; len < n; ++len) {
  52.         for (int l = 0; l + len < n; ++l) {
  53.             int r = l + len;
  54.             dp[l][r] = dp[l + 1][r - 1] + (match(s[l], s[r])? 0 : INF);
  55.             for (int m = l; m < r; ++m) {
  56.                 if (dp[l][r] > dp[l][m] + dp[m + 1][r]) {
  57.                     dp[l][r] = dp[l][m] + dp[m + 1][r];
  58.                     p[l][r] = m;
  59.                 }
  60.             }
  61.         }
  62.     }
  63.  
  64.     rec(0, n - 1);
  65. }
Advertisement
Add Comment
Please, Sign In to add comment