fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define FR0(i,N) for(i=0;i<(N);i++)
  4. #define FR1(i,N) for(i=1;i<=(N);i++)
  5. #define FRN(i,k,N) for(i=k;i<(N);i++)
  6. #define pf printf
  7. #define db double
  8. #define max3(a,b,c) max(max(a,b),c)
  9. #define min3(a,b,c) min(min(a,b),c)
  10. #define sci(n) scanf("%d",&n)
  11. #define scl(n) scanf("%lld",&n)
  12. #define scf(n) scanf("%f",&n)
  13. #define scd(n) scanf("%lf",&n)
  14. #define scs(s) scanf("%s",&s)
  15. #define scll(n) scanf("%%I64d",&n)
  16. #define PI acos(-1.0)
  17. #define LL long long
  18. #define MX 1000005
  19. #define MOD 1000000007
  20. typedef long long int ll;
  21. bool status[1100002];
  22. int dp[1010][1010];
  23. int x[1000],y[1000];
  24. int lcs(int m,int n)
  25. {
  26. memset(dp,0,sizeof(dp));
  27. for(int i=1; i<=m; i++)
  28. {
  29. for(int j=1; j<=n; j++)
  30. {
  31. if(x[i]==y[j])
  32. {
  33. dp[i][j]=dp[i-1][j-1]+1;
  34. }
  35. else
  36. {
  37. dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
  38. }
  39. }
  40. }
  41. return dp[m][n];
  42. }
  43. int main()
  44. {
  45. int m,n,t=1;
  46. while(cin>>m>>n)
  47. {
  48. if(m==0 && n==0)
  49. {
  50. break;
  51. }
  52. for(int i=1; i<=m; i++)
  53. {
  54. cin>>x[i];
  55. }
  56. for(int j=1; j<=n; j++)
  57. {
  58. cin>>y[j];
  59. }
  60. int res=lcs(m,n);
  61. //cout<<res<<endl;
  62. cout<<"Twin Towers #"<<t++<<endl;
  63. cout<<"Number of Tiles : "<<res<<endl<<endl;
  64.  
  65. }
  66. }
  67.  
  68.  
Success #stdin #stdout 0s 8528KB
stdin
7 6
20 15 10 15 25 20 15
15 25 10 20 15 20
8 9
10 20 20 10 20 10 20 10
20 10 20 10 10 20 10 10 20
0 0
stdout
Twin Towers #1
Number of Tiles : 4

Twin Towers #2
Number of Tiles : 6