Guest User

Untitled

a guest
Dec 9th, 2013
833
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. template<typename T> T gcd(T a, T b) {
  4.     if(!b) return a;
  5.     return gcd(b, a % b);
  6. }
  7. template<typename T> T lcm(T a, T b) {
  8.     return a * b / gcd(a, b);
  9. }
  10.  
  11. template<typename T> void chmin(T& a, T b) { a = (a > b) ? b : a; }
  12. template<typename T> void chmax(T& a, T b) { a = (a < b) ? b : a; }
  13. int in() { int x; scanf("%d", &x); return x; }
  14.  
  15. using namespace std;
  16.  
  17. typedef long long Int;
  18. typedef unsigned uint;
  19.  
  20. int T;
  21. int N;
  22.  
  23. char str[60][60];
  24.  
  25. string dp[60][60];
  26. bool mark[60][60];
  27.  
  28. string func(int a, int b) {
  29.     if (a == b) {
  30.         return "";        
  31.     } else if (a + 1 == b) {
  32.         return string(1, str[a][b]);
  33.     } else {
  34.         string& ans = dp[a][b];
  35.  
  36.         if (!mark[a][b]) {
  37.             mark[a][b] = true;
  38.            
  39.             int i;
  40.             int j;
  41.  
  42.             ans = "";
  43.  
  44.             for (i = a + 1; i < N; i++) {
  45.                 for (j = b - 1; j >= 0; j--) {                    
  46.                     if (i > j) {
  47.                         break;
  48.                     }
  49.  
  50.                     if (str[a][i] == str[b][j]) {                        
  51.                         string curr = str[a][i] + func(i, j) + str[b][j];
  52.  
  53.                         if (curr.size() > ans.size() || (curr.size() == ans.size() && curr < ans)) {  
  54.                             ans = curr;
  55.                         }
  56.                     }
  57.                 }
  58.             }
  59.         }
  60.  
  61.         return ans;
  62.     }
  63. }
  64.  
  65. int main(void) {
  66.     T = in();
  67.  
  68.     int i;
  69.  
  70.     for ( ; T--; ) {
  71.         N = in();
  72.  
  73.         for (i = 0; i < N; i++) {
  74.             scanf("%s", str[i]);
  75.         }
  76.  
  77.         memset(mark, false, sizeof(mark));
  78.  
  79.         string ans = func(0, N - 1);
  80.  
  81.         puts(ans.c_str());
  82.     }
  83.  
  84.     return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment