Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long int
- ll n,m,a[2005],b[2005];
- ll dp[2005][2005][8];
- int LCSOrdered(int i,int j,int k){
- if(i==n || j==m){
- return 0;
- }
- if(dp[i][j][k]!=-1){
- return dp[i][j][k];
- }
- if(a[i]==b[j]){
- return 1+LCSOrdered(i+1,j+1,k);
- }
- else {
- int q1=INT_MIN,q2=INT_MIN,q3=INT_MIN;
- if(k>0){
- q1=1+LCSOrdered(i+1,j+1,k-1);
- }
- q2=LCSOrdered(i,j+1,k);
- q3=LCSOrdered(i+1,j,k);
- ll ans;
- ans = max(q1,max(q2,q3));
- dp[i][j][k] =ans;
- return ans;
- }
- }
- int main() {
- #ifndef ONLINE_JUDGE
- // for getting input from input.txt
- freopen("input.txt", "r", stdin);
- // for writing output to output.txt
- freopen("output.txt", "w", stdout);
- #endif
- ll k;
- cin >> n >> m >> k;
- memset(dp,-1,sizeof(dp));
- for(int i=0;i<n;i++) cin >> a[i];
- for(int i=0;i<m;i++) cin >> b[i];
- int ans = LCSOrdered(0,0,k);
- cout << ans << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement