lelouche29

LCS

Apr 29th, 2020
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <iostream>
  3. #define pb push_back
  4. #define INF 1000000000
  5. #define mp make_pair
  6. #define ll long long
  7. #define tc int t; cin>>t; while(t--)
  8. #define for0(i,n) for(int i=0; i<n; i++)
  9. #define for1(i,n) for(int i=1; i<=n; i++)
  10. #define pi pair<int,int>
  11. #define pii vector<pair<int,int>>
  12.  
  13. using namespace std;
  14.  
  15. int solve(int i, int j, string s1, string s2, vector<vector<int>> &dp) {
  16.     //base case
  17.     if (i >= s1.size() || j >= s2.size()) return 0;
  18.  
  19.     //memorization
  20.     if (dp[i][j] != -1) return dp[i][j];
  21.  
  22.     //if character matches
  23.     if (s1[i] == s2[j]) return 1 + solve(i + 1, j + 1, s1, s2, dp);
  24.  
  25.     else {
  26.         int left = solve(i, j + 1, s1, s2, dp);
  27.         int right = solve(i + 1, j, s1, s2, dp);
  28.         return dp[i][j] = max(left, right);
  29.     }
  30. }
  31.  
  32. int main() {
  33.     init();
  34.     // tc
  35.     {
  36.         string s1, s2;
  37.         cin >> s1 >> s2;
  38.  
  39.         int n = s1.size();
  40.         int m = s2.size();
  41.  
  42.         vector<vector<int>> dp(n, vector<int> (m, -1));
  43.         cout << solve(0, 0, s1, s2, dp);
  44.  
  45.     }
  46.  
  47.     return 0;
  48. }
Add Comment
Please, Sign In to add comment