Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define sz size
- #define pb push_back
- using namespace std;
- int n; string s;
- int f[5005][5005];
- void dp() {
- for (int k = 1; k <= n; k++)
- for (int i = 1; i <= n - k + 1; i++) {
- int j = i + k - 1;
- if (s[i] == s[j]) f[i][j] = f[i + 1][j - 1];
- else f[i][j] = min(f[i + 1][j], f[i][j - 1]) + 1;
- }
- cout << f[1][n] << '\n';
- }
- void tb() {
- vector<char> l, r;
- int i = 1, j = n;
- while (i <= j) {
- if (s[i] == s[j]) {
- l.pb(s[i]);
- if (i != j) r.pb(s[j]);
- i++; j--;
- } else {
- if (f[i + 1][j] < f[i][j - 1]) {
- l.pb(s[i]); r.pb(s[i]);
- i++;
- } else {
- l.pb(s[j]); r.pb(s[j]);
- j--;
- }
- }
- }
- for (int i = 0; i < (int)l.sz(); i++) cout << l[i];
- for (int i = r.sz() - 1; i >= 0; i--) cout << r[i];
- cout << '\n';
- }
- int main() {
- cin >> n;
- cin >> s;
- s = '$' + s;
- dp(); tb();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement