Pagini recente » Diferente pentru problema/smooth2 intre reviziile 19 si 20 | Cod sursa (job #2369539) | Cod sursa (job #3152994) | Cod sursa (job #509960) | 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;
}