Advertisement
shamiul93

UVa 10066 - The Twin Towers

May 19th, 2017
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.66 KB | None | 0 0
  1. /**
  2. @author - Rumman BUET CSE'15
  3. Problem - UVa 10066 The Twin Towers
  4.  
  5. Concept - LCS , DP
  6.  
  7. Easy one. Just understand if LCS can be applied for bricks, it can be applied for bricks too. :3
  8. */
  9.  
  10. #include <bits/stdc++.h>
  11. #include<vector>
  12. #define ll                                      long long int
  13. #define fi                                      freopen("in.txt", "r", stdin)
  14. #define fo                                      freopen("out.txt", "w", stdout)
  15. #define m0(a) memset(a , 0 , sizeof(a))
  16. #define m1(a) memset(a , -1 , sizeof(a))
  17.  
  18. #define mx 150000
  19. using namespace std;
  20.  
  21. int s1[110] , s2[110] ;
  22. int dp[110][110] ;
  23. int l1 , l2 ;
  24.  
  25. void lcs()
  26. {
  27.     for(int i = 0 ; i < 110 ; i++)
  28.     {
  29.         dp[i][0] = 0 ;
  30.         dp[0][i] = 0 ;
  31.     }
  32.     for(int i = 1 ; i <= l1 ; i++)
  33.     {
  34.         for(int j = 1 ; j <= l2 ; j++)
  35.         {
  36.             if(s1[i-1] == s2[j-1])
  37.             {
  38.                 dp[i][j] = dp[i-1][j-1] + 1 ;
  39.             }
  40.             else if(dp[i-1][j] > dp[i][j-1])
  41.             {
  42.                 dp[i][j] = dp[i-1][j] ;
  43.             }
  44.             else if(dp[i-1][j] <= dp[i][j-1])
  45.             {
  46.                 dp[i][j] = dp[i][j-1] ;
  47.             }
  48.         }
  49.     }
  50. }
  51.  
  52. int main()
  53. {
  54. //    fi ;
  55. //    fo ;
  56.     int t = 0 ;
  57.     while(scanf("%d %d",&l1 , &l2) && l1 && l2)
  58.     {
  59.         t++ ;
  60.         for(int i = 0 ; i < l1 ; i++)
  61.         {
  62.             scanf("%d",&s1[i]) ;
  63.         }
  64.         for(int j = 0 ; j < l2 ; j++)
  65.         {
  66.             scanf("%d",&s2[j]) ;
  67.         }
  68.         lcs() ;
  69.         printf("Twin Towers #%d\n" , t) ;
  70.  
  71.         printf("Number of Tiles : %d\n\n",dp[l1][l2]) ;
  72.     }
  73.     return 0 ;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement