Pagini recente » Cod sursa (job #1974167) | Cod sursa (job #2880110) | Cod sursa (job #3207348) | Cod sursa (job #3146915) | Cod sursa (job #27623)
Cod sursa(job #27623)
#include <fstream.h>
#include <string.h>
short int nr[50][50],lmax[50][50];
char s[502],t[502],aux[502];
void citire()
{
ifstream f("subsir.in");
f.getline(s,501);
f.getline(t,501);
f.close();
strcpy(aux,s);
strcpy(s+1,aux);
strcpy(aux,t);
strcpy(t+1,aux);
}
void dinamica()
{
int i,j;
for(i=1;i<=strlen(s)+strlen(t);i++)
{
lmax[i][0]=lmax[0][i]=0;
nr[i][0]=nr[0][i]=1;
}
for(i=1;i<strlen(s);i++)
for(j=1;j<strlen(t);j++)
{
if(s[i]==t[j])
{
lmax[i][j]=1+lmax[i-1][j-1];
nr[i][j]=nr[i-1][j-1];
}
else
{
if(lmax[i-1][j]>lmax[i][j-1])
{
lmax[i][j]=lmax[i-1][j];
nr[i][j]=nr[i-1][j];
}
if(lmax[i][j-1]>lmax[i-1][j])
{
lmax[i][j]=lmax[i][j-1];
nr[i][j]=nr[i][j-1];
}
if((lmax[i-1][j]==lmax[i][j-1])&&(lmax[i-1][j-1]==lmax[i-1][j]))
{
lmax[i][j]=lmax[i-1][j];
nr[i][j]=nr[i-1][j]+nr[i][j-1]-nr[i-1][j-1];
}
}
}
}
void afisare()
{
ofstream f2("subsir.out");
f2<<nr[strlen(s)-1][strlen(t)-1];
f2.close();
}
int main()
{
citire();
dinamica();
afisare();
return 0;
}