giabinh

ChuoiDoiXung

Oct 12th, 2015
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.93 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. char a[2005], b[2005];
  6. int f[2005][2005];
  7.  
  8. int main() {
  9.     #ifndef ONLINE_JUDGE
  10.         freopen("NKPALIN.inp", "r", stdin);
  11.     #endif // ONLINE_JUDGE
  12.  
  13.     scanf("%s", a);
  14.     int len = strlen(a);
  15.     for (int i=0; i<len; ++i) b[i] = a[i];
  16.     reverse(b, b+len);
  17.     memset(f, 0, sizeof f);
  18.  
  19.     for (int i=1; i<=len; ++i)
  20.         for (int j=1; j<=len; ++j)
  21.             if (a[i-1] == b[j-1]) f[i][j] = f[i-1][j-1] + 1;
  22.             else f[i][j] = max(f[i][j-1], f[i-1][j]);
  23.  
  24.     int i = len, j = len;
  25.     vector <char> ans;
  26.     while (i > 0 && j > 0)
  27.     {
  28.         if (a[i-1] == b[j-1])
  29.         {
  30.             ans.push_back(a[i-1]);
  31.             --i; --j;
  32.         }
  33.         else
  34.         {
  35.             if (f[i][j] == f[i-1][j]) --i; else --j;
  36.         }
  37.     }
  38.  
  39.     //reverse(ans.begin(), ans.end());
  40.     for (int i=0; i<ans.size(); ++i) cout << ans[i];
  41.  
  42.     return 0;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment