fork(1) download
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4.  
  5. int n;
  6. string S[1003];
  7. void read()
  8. {
  9. cin>>n;
  10. for (int i=1; i<=n; i++)
  11. cin>>S[i];
  12. }
  13.  
  14. int F[31][31];
  15. void init()
  16. {
  17. for (int i=0; i<=30; i++)
  18. for (int j=0; j<=30; j++)
  19. F[i][j]=0;
  20. }
  21.  
  22. int LCS(string S1, string S2)
  23. {
  24. init();
  25.  
  26. for (int i=0; i<S1.length(); i++)
  27. {
  28. for (int j=0; j<S2.length(); j++)
  29. {
  30. if (S1[i]==S2[j])
  31. F[i+1][j+1]=F[i][j]+1;
  32. else
  33. F[i+1][j+1]=max(F[i][j+1], F[i+1][j]);
  34. }
  35. }
  36. return F[S1.length()][S2.length()];
  37. }
  38.  
  39. int main ()
  40. {
  41. int t;
  42. cin>>t;
  43. while (1)
  44. {
  45. if (t==0) break;
  46. t--;
  47. read();
  48. int maxLCS = 0;
  49. for (int i=1; i<=n; i++)
  50. {
  51. for (int j=i+1; j<=n; j++)
  52. maxLCS = max(maxLCS, LCS(S[i], S[j]));
  53. }
  54. cout<<maxLCS<<endl;
  55. }
  56. return 0;
  57. }
Success #stdin #stdout 0s 4436KB
stdin
2
2
ALICE
BOB
2
ABCB
BCAB
stdout
0
3