Pagini recente » Cod sursa (job #2341637) | Cod sursa (job #1527198) | Cod sursa (job #3247164) | Cod sursa (job #2240594) | Cod sursa (job #2557920)
Utilizator |
Dinucu 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;
}