Advertisement
srijan44

KOrderedLCS(3D)DP

Feb 16th, 2020
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.90 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long int
  4. ll n,m,a[2005],b[2005];
  5. ll dp[2005][2005][8];
  6. int LCSOrdered(int i,int j,int k){
  7.     if(i==n || j==m){
  8.         return 0;
  9.     }
  10.    
  11.     if(dp[i][j][k]!=-1){
  12.         return dp[i][j][k];
  13.     }
  14.  
  15.     if(a[i]==b[j]){
  16.         return 1+LCSOrdered(i+1,j+1,k);
  17.     }
  18.     else {
  19.         int q1=INT_MIN,q2=INT_MIN,q3=INT_MIN;
  20.         if(k>0){
  21.             q1=1+LCSOrdered(i+1,j+1,k-1);
  22.         }
  23.        
  24.             q2=LCSOrdered(i,j+1,k);
  25.             q3=LCSOrdered(i+1,j,k);
  26.        
  27.         ll ans;
  28.         ans = max(q1,max(q2,q3));
  29.         dp[i][j][k] =ans;
  30.         return ans;
  31.     }
  32. }
  33.  
  34. int  main() {
  35.  
  36.     #ifndef ONLINE_JUDGE
  37.     // for getting input from input.txt
  38.     freopen("input.txt", "r", stdin);
  39.     // for writing output to output.txt
  40.     freopen("output.txt", "w", stdout);
  41.     #endif
  42.  
  43.     ll k;
  44.     cin >> n >> m >> k;
  45.     memset(dp,-1,sizeof(dp));
  46.     for(int i=0;i<n;i++) cin >> a[i];
  47.  
  48.     for(int i=0;i<m;i++) cin >> b[i];
  49.    
  50.  
  51.     int ans = LCSOrdered(0,0,k);
  52.     cout << ans << endl;
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement