Advertisement
tuki2501

PALIN

Feb 24th, 2020
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.86 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define sz size
  3. #define pb push_back
  4. using namespace std;
  5.  
  6. int n; string s;
  7. int f[5005][5005];
  8.  
  9. void dp() {
  10.     for (int k = 1; k <= n; k++)
  11.     for (int i = 1; i <= n - k + 1; i++) {
  12.         int j = i + k - 1;
  13.         if (s[i] == s[j]) f[i][j] = f[i + 1][j - 1];
  14.         else f[i][j] = min(f[i + 1][j], f[i][j - 1]) + 1;
  15.     }
  16.     cout << f[1][n] << '\n';
  17. }
  18.  
  19. void tb() {
  20.     vector<char> l, r;
  21.     int i = 1, j = n;
  22.     while (i <= j) {
  23.         if (s[i] == s[j]) {
  24.             l.pb(s[i]);
  25.             if (i != j) r.pb(s[j]);
  26.             i++; j--;
  27.         } else {
  28.             if (f[i + 1][j] < f[i][j - 1]) {
  29.                 l.pb(s[i]); r.pb(s[i]);
  30.                 i++;
  31.             } else {
  32.                 l.pb(s[j]); r.pb(s[j]);
  33.                 j--;
  34.             }
  35.         }
  36.     }
  37.     for (int i = 0; i < (int)l.sz(); i++) cout << l[i];
  38.     for (int i = r.sz() - 1; i >= 0; i--) cout << r[i];
  39.     cout << '\n';
  40. }
  41.  
  42. int main() {
  43.     cin >> n;
  44.     cin >> s;
  45.     s = '$' + s;
  46.     dp(); tb();
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement