Advertisement
Guest User

Untitled

a guest
Mar 29th, 2020
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4.  
  5. ll lcs[31][31], dp[31][31], n, m;
  6. string a, b;
  7.  
  8. ll call(ll i, ll j)
  9. {
  10.     if(i == n || j == m)
  11.         return 0;
  12.     if(lcs[i][j] != -1)
  13.         return lcs[i][j];
  14.  
  15.     if(a[i] == b[j])
  16.     {
  17.         lcs[i][j] = 1 + call(i+1, j+1);
  18.         dp[i][j] = dp[i+1][j+1];
  19.     }
  20.     else
  21.     {
  22.         lcs[i][j] = max(call(i+1, j), call(i, j+1));
  23.         if(lcs[i][j] > lcs[i+1][j] && lcs[i+1][j] != -1)
  24.             dp[i][j] = dp[i+1][j];
  25.         else if(lcs[i][j] < lcs[i][j+1] && lcs[i][j+1] != -1)
  26.             dp[i][j] = dp[i][j+1];
  27.         else
  28.             dp[i][j] = dp[i+1][j] + dp[i][j+1];
  29.     }
  30.  
  31.     return lcs[i][j];
  32. }
  33.  
  34. int main()
  35. {
  36.     ll t, caseno = 0, i, j, ans;
  37.     cin >> t;
  38.  
  39.     while(t--)
  40.     {
  41.         memset(lcs, -1, sizeof(lcs));
  42.         memset(dp, 0, sizeof(dp));
  43.  
  44.         cin >> a >> b;
  45.         n = a.size();
  46.         m = b.size();
  47.  
  48.         for(i = 0; i <= n; i++)
  49.             dp[i][m] = 1;
  50.         for(i = 0; i <= m; i++)
  51.             dp[n][i] = 1;
  52.  
  53.         ans = call(0, 0);
  54. //        for(i = 0; i <= m; i++)
  55. //        {
  56. //            for(j = 0; j <= n; j++)
  57. //                cout << setw(3) << dp[j][i] << setw(3) << lcs[j][i];
  58. //            cout << endl;
  59. //        }
  60.  
  61.         cout << n+m - ans << " " << dp[0][0] << endl;
  62.     }
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement