Cod sursa(job #2557920)

Utilizator rd211Dinucu David rd211 Data 26 februarie 2020 09:44:59
Problema Seif Scor 0
Compilator cpp-64 Status done
Runda sim11_1 Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;
int k;
string a, b;
int dp[1010][1010];
ifstream fin("seif.in");
ofstream fout("seif.out");
int main()
{
    int t;
    fin>>t;
    while(t--)
    {
        fin>>k>>a>>b;
        reverse(a.begin(),a.end());
        reverse(b.begin(), b.end());
        for(int i = 0; i<a.size(); i++)
        {
            for(int j = 0; j<b.size(); j++)
            {
                if(a[i]==b[j])
                {
                    dp[i+1][j+1] = dp[i][j]+1;
                }
                else
                    dp[i+1][j+1] = max(dp[i][j+1],dp[i+1][j]);
            }
        }
        string maxim;
        for(int i =0; i<a.size(); i++)
        {
            for(int j = 0; j<b.size(); j++)
            {
                string cur;
                if(dp[i+1][j+1]>=k)
                {
                    int ii=i, jj=j;
                    for(;ii>-1;){
                    if(a[ii]==b[jj])
                        cur+=a[ii],--ii,--jj;
                    else if(dp[ii][jj+1]<dp[ii+1][jj])
                        --jj;
                    else
                        --ii;
                    }
                    maxim = max(cur,maxim);
                }
            }
        }
        memset(dp,0,1010*1010);
        fout<<maxim<<'\n';
    }
    return 0;
}