Advertisement
shamiul93

1159 - Batman

May 31st, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.23 KB | None | 0 0
  1. /**
  2. @author - Rumman BUET CSE'15
  3. Problem - 1159 - Batman
  4.  
  5. Concept - LCS , DP
  6.  
  7. আইডিয়াঃ এই প্রব্লেমের আইডিয়া আমার মাথায় হুট করে আসছে । মিরাকুলাস ঘটনা বলবো কি না জানি না । প্রথমে ভাবসিলাম ২ জনের মধ্যে এল সি এস টা বাইর করবো । এর পর ৩ নাম্বারের সাথে
  8. আবার এল সি এস বাইর করবো । কিন্তু তাতে রঙ আসবে । কেন ?? acdkkk , bkkkcd , pcd - এই কেসে মারা খাবে ।
  9.  
  10. এরপর ভাব্লাম , প্রতি ২ টা জোড়ার মধ্যে এল সি এস বের করি । তাইলে ঘটনা যেটা ঘটবে এদের মিনিমাম টা নিলেই শেষ ।
  11.  
  12. ২ টা কাজ করলো না  তখন বুঝলাম বাংলা নিয়ম মারবো । কেমনে ? আগে ২ জনের জন্য এল সি এস বের করতাম , এখন ৩ জনের জন্য বের করবো । কেমনে ?
  13.  
  14. 3D অ্যারে নিলাম । এরপর জাস্ট নরমালি ইন্ডেক্স টা সাজিয়ে কোড করলাম । AC আসলো ।
  15.  
  16. শিক্ষাঃ যত গুলা স্ট্রিং এর এল সি এস চাইবে , তাঁদের জন্য তত স্টেটের ডিপি অ্যারে নিবা । ঘটনা শেষ । :p শরটকাট খুজতে গেসিলাম ফার্স্টের ২ সিস্টেমে । এর চাইতে সরাসরি বের করা স্মার্ট সল্যুশন ।
  17.  
  18. অ্যান্ড বিলিভ মি , আমি এই সলুশন নিজে বাইর করসি । :3 এরপর বাইরে সল্ভ দেখে বুঝলাম , সবাই এমনেই করসে । বুঝতেসি না কি বুঝা উচিৎ এ থেকে । - আমি অতটা গাধা না যতটা নিজেকে ভাবি ,
  19. নাকি সবাই আমার চেয়ে ভালো বা সমান , তাই তারা যা খুব দ্রুত বের করসে , আমি সেটা কেমনে কেমনে জানি বাইর করসি । :3
  20.  
  21. */
  22.  
  23.  
  24. // LightOJ always needs this format for sure..so I made a copy of it...
  25. #include <bits/stdc++.h>
  26. #include<vector>
  27. #define ll                                      long long int
  28. #define fi                                      freopen("in.txt", "r", stdin)
  29. #define fo                                      freopen("out.txt", "w", stdout)
  30. #define m0(a) memset(a , 0 , sizeof(a))
  31. #define m1(a) memset(a , -1 , sizeof(a))
  32. #define max3(a,b,c) max( a , max(b,c))
  33.  
  34. #define mx 150000
  35. using namespace std;
  36.  
  37. string s1, s2, s3 ;
  38. ll len1, len2, len3 ;
  39.  
  40. ll dp[60][60][60] ;
  41.  
  42. ll lcs()
  43. {
  44.     for(ll i = 0 ; i < 60 ; i++)
  45.     {
  46.         dp[i][0][0] = 0 ;
  47.         dp[0][i][0] = 0 ;
  48.         dp[0][0][i] = 0 ;
  49.     }
  50.  
  51.     for(ll i = 1 ; i <= len1 ; i++)
  52.     {
  53.         for(ll j = 1 ; j <= len2 ; j++)
  54.         {
  55.             for(ll k = 1 ; k <= len3 ; k++)
  56.             {
  57.                 if(s1[i-1] == s2[j-1] && s2[j-1] == s3[k-1])
  58.                 {
  59.                     dp[i][j][k] = dp[i-1][j-1][k-1] + 1 ;
  60.                 }
  61.                 else
  62.                 {
  63.                     dp[i][j][k] = max3(dp[i-1][j][k], dp[i][j-1][k], dp[i][j][k-1]) ;
  64.                 }
  65.             }
  66.         }
  67.     }
  68.  
  69.     return dp[len1][len2][len3] ;
  70. }
  71.  
  72.  
  73. int main()
  74. {
  75. //    fi ;
  76. //    fo ;
  77.     ll T, t = 0 ;
  78.     scanf("%lld",&T) ;
  79.  
  80.     while(T--)
  81.     {
  82.         t++ ;
  83.         cin >> s1 >> s2 >> s3 ;
  84.         len1 = s1.length() ;
  85.         len2 = s2.length() ;
  86.         len3 = s3.length() ;
  87.  
  88.         ll ans ;
  89.         ans = lcs() ;
  90.  
  91.         printf("Case %lld: ",t) ;
  92.         printf("%lld\n",ans);
  93.     }
  94.     return 0 ;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement