Problem: 2050E - Three Strings
Language: c++17 

Code 1:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define csb_int __builtin_popcount
#define csb_ll __builtin_popcountll
#define all(x) x.begin(),x.end()
ll f(ll i,ll j,string&a,string&b,string&c,vector<vector<ll>>&dp){
    if(i+j==c.size()-1)return 0;
    if(dp[i][j]!=-1)return dp[i][j];
    ll op=c.size();
    if(i+1 < a.size()){
        if(a[i+1]==c[i+1+j]){
            op=min(op,f(i+1,j,a,b,c,dp));
        }
        if(a[i+1]!=c[i+1+j]){
            op=min(op,1+f(i+1,j,a,b,c,dp));
        }
    }
    if(j+1 < b.size()){
        if(b[j+1]==c[i+j+1]){
            op=min(op,f(i,j+1,a,b,c,dp));
        }
        if(b[j+1]!=c[i+j+1]){
            op=min(op,1+f(i,j+1,a,b,c,dp));
        }
    }
    return dp[i][j]=op;
}
void ans(){
    string a,b,c; 
    cin>>a>>b>>c;
    string a1=" ";
    a1+=a;
    string b1=" ";
    b1+=b;
    string c1=" ";
    c1+=c;
    ll n=a1.size(),m=b1.size();
    vector<vector<ll>>dp(n,vector<ll>(m,-1));
    cout<<f(0,0,a1,b1,c1,dp)<<endl;
}
int main(){
int t;
cin>>t;
//ios_base::sync_with_stdio(false);
//cin.tie(NULL);cout.tie(NULL);
while(t--){
ans();
}
return 0;
}

Code 2:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define csb_int __builtin_popcount
#define csb_ll __builtin_popcountll
#define all(x) x.begin(),x.end()
ll f(ll i,ll j,ll k,string&a,string&b,string&c,vector<vector<vector<ll>>>&dp){
    if(k==c.size())return 0;
    if(dp[i][j][k]!=-1)return dp[i][j][k];
    ll op=c.size();
    if(i<a.size() && a[i]==c[k] && j<b.size() && b[j]==c[k]){
        op= min(op,min(f(i+1,j,k+1,a,b,c,dp),f(i,j+1,k+1,a,b,c,dp)));
    }
    else if(i<a.size() && a[i]==c[k] && j<b.size() && b[j]!=c[k]){
        op=min(op,f(i+1,j,k+1,a,b,c,dp));
        op=min(op,1+f(i,j+1,k+1,a,b,c,dp));
    }
    else if(i<a.size() && a[i]!=c[k] && j<b.size() && b[j]==c[k]){
        op=min(op,1+f(i+1,j,k+1,a,b,c,dp));
        op=min(op,f(i,j+1,k+1,a,b,c,dp));
    }
    else if(i<a.size() && a[i]!=c[k] && j<b.size() && b[j]!=c[k]){
        op=min(op,1+f(i+1,j,k+1,a,b,c,dp));
        op=min(op,1+f(i,j+1,k+1,a,b,c,dp));
    }
    else{
        if(i<a.size()){
            if(a[i]==c[k]){
                op=min(op,f(i+1,j,k+1,a,b,c,dp));
            }
            else{
                op=min(op,1+f(i+1,j,k+1,a,b,c,dp));
            }
        }
        if(j<b.size()){
            if(b[j]==c[k]){
                op=min(op,f(i,j+1,k+1,a,b,c,dp));
            }
            else{
                op=min(op,1+f(i,j+1,k+1,a,b,c,dp));
            }
        }
    }
    return dp[i][j][k]=op;
}
void ans(){
    string a,b,c;
    cin>>a>>b>>c;
    ll l=a.size();
    ll n=b.size();
    ll m=c.size();
    vector<vector<vector<ll>>>dp(l+1,vector<vector<ll>>(n+1,vector<ll>(m+1,0)));
    for(ll i=l;i>=0;i--){
        for(ll j=n;j>=0;j--){
            for(ll k=m-1;k>=0;k--){
                ll op=c.size();
                if(i<a.size() && a[i]==c[k] && j<b.size() && b[j]==c[k]){
                    op= min(op,min(dp[i+1][j][k+1],dp[i][j+1][k+1]));
                }
                else if(i<a.size() && a[i]==c[k] && j<b.size() && b[j]!=c[k]){
                    op=min(op,dp[i+1][j][k+1]);
                    op=min(op,1+dp[i][j+1][k+1]);
                }
                else if(i<a.size() && a[i]!=c[k] && j<b.size() && b[j]==c[k]){
                    op=min(op,1+dp[i+1][j][k+1]);
                    op=min(op,dp[i][j+1][k+1]);
                }
                else if(i<a.size() && a[i]!=c[k] && j<b.size() && b[j]!=c[k]){
                    op=min(op,1+dp[i+1][j][k+1]);
                    op=min(op,1+dp[i][j+1][k+1]);
                }
                else{
                    if(i<a.size()){
                        if(a[i]==c[k]){
                            op=min(op,dp[i+1][j][k+1]);
                        }
                        else{
                            op=min(op,1+dp[i+1][j][k+1]);
                        }
                    }
                    if(j<b.size()){
                        if(b[j]==c[k]){
                            op=min(op,dp[i][j+1][k+1]);
                        }
                        else{
                            op=min(op,1+dp[i][j+1][k+1]);
                        }
                    }
                }
                dp[i][j][k]=op;
            }
        }
    }
    cout<<dp[0][0][0]<<endl;
    // cout<<f(0,0,0,a,b,c,dp)<<endl;
}
int main(){
int t;
cin>>t;
//ios_base::sync_with_stdio(false);
//cin.tie(NULL);cout.tie(NULL);
while(t--){
ans();
}
return 0;
}

Answer: 1