Salvens

B

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