Cod sursa(job #27623)

Utilizator smecheruBerindei Vlad smecheru Data 6 martie 2007 21:27:05
Problema Subsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#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;
	}