Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define ffr(i,a,b) for(i=a;i<b;i++)
- #define mm(a,b) memset(a,b,sizeof(a))
- #define pb push_back
- #define ll long long
- using namespace std;
- string a,b,c;
- int dp[54][54][54];
- ll ans(int i, int j, int k)
- {
- if(i<0 || j<0 || k<0) return 0;
- if(dp[i][j][k]!=-1) return dp[i][j][k];
- if(a[i]==b[j] && a[i]==c[k]) return 1+ans(i-1,j-1,k-1);
- else
- {
- int aa, bb, cc;
- aa=ans(i-1,j,k);
- bb=ans(i,j-1,k);
- cc=ans(i,j,k-1);
- return dp[i][j][k]=max(max(aa,bb),cc);
- }
- }
- int main()
- {
- int cc=1, t;
- cin >> t;
- while(t--)
- {
- mm(dp,-1);
- cin >> a >> b >> c;
- int az=a.size();
- int bz=b.size();
- int cz=c.size();
- ll call=ans(az-1,bz-1,cz-1);
- printf("Case %d: %lld\n", cc++, call);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement