Pagini recente » Cod sursa (job #3042104) | Cod sursa (job #160627) | Cod sursa (job #3040195) | Cod sursa (job #3042047) | Cod sursa (job #306262)
Cod sursa(job #306262)
#include <fstream.h>
ifstream f("cmlsc.in");
ofstream g ("cmlsc.out");
unsigned char lcs[1025][1025],x[1025],y[1025];
int n,m;
void citeste ()
{ int i;
f>>n;
f>>m;
for (i=1; i<=n; i++)
f>>x[i];
for (i=1; i<=m; i++)
f>>y[i];
}
void prelucreaza ()
{ for (int k=1; k<=n; k++)
for (int h=1; h<=m; h++)
if (x[k]==y[h])
lcs[k][h]=1+lcs[k-1][h-1];
else
if (lcs[k-1][h]>lcs[k][h-1])
lcs[k][h]=lcs[k-1][h];
else
lcs[k][h]=lcs[k][h-1];
}
void scrie ()
{ g<<"Lungime subsirului comun maximal este: "<<lcs[n][m]; g<<endl;
int p[100]={0};
for (int i=0, k=n, h=m; lcs[k][h];)
if (x[k]==y[h])
{p[i++]=x[k]; k--; h--; }
else if (lcs[k][h]==lcs[k-1][h])
k--;
else
h--;
for (k=i-1; k>=0; k--) g<<p[k]<<" ";
}
int main ()
{ citeste ();
prelucreaza ();
scrie ();
}