Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- using namespace std;
- string s;
- int v[101][101];
- int n;
- string pal;
- int f(int l, int r)
- {
- if (l > r)
- return 0;
- if (v[l][r] != -1)
- return v[l][r];
- if (s[l] == s[r])
- return 2 + f(l+1, r-1);
- return max(f(l+1,r), f(l, r-1));
- }
- void ans(int l, int r, int pl, int pr)
- {
- while (l <= r)
- {
- if (l == r)
- {
- pal[pl] = s[l];
- l++; pl++;
- }
- else
- {
- if (s[l] == s[r])
- {
- pal[pl] = s[l];
- pal[pr] = s[r];
- pl++; pr--; l++; r--;
- }
- else
- {
- if (v[l+1][r] > v[l][r-1])
- l++;
- else
- r--;
- }
- }
- }
- }
- int main()
- {
- getline(cin,s);
- n = s.size();
- int res;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- v[i][j] = -1;
- for (int i = 0; i < n; i++)
- v[i][i] = 1;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < i; j++)
- v[i][j] = -1;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- v[i][j] = f(i,j);
- v[0][n-1] = f(0,n-1);
- res = v[0][n-1];
- pal = s;
- ans(0,n-1,0,res-1);
- cout << res << endl;
- for (int i = 0; i < res; i++)
- cout << pal[i];
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement