Cod sursa(job #2225420)

Utilizator RBX1234Rusu Ruxandra RBX1234 Data 27 iulie 2018 01:04:02
Problema Subsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;

int main()
{
	char s1[500],s2[500];
	int m,n;
	ifstream fin("subsir.in");
	fin >> s1 >> s2;
	m = strlen(s1);
	n = strlen(s2);
	
	int dp[500][500][2];

	//m coloane si n linii
	for (int i=0; i<=m; i++)
	{
		dp[0][i][0] = 0;
		dp[0][i][1] = 0;

	}
	for (int i=0; i<=n; i++)
	{	
		dp[i][0][0] = 0;
		dp[i][0][1] = 0;
	}

	for(int i = 1; i<=n; i++)
		for (int j = 1; j<=m; j++)
		{
			if ( s1[i-1] == s2[j-1])
			{	
				//cout << "text" << i << j << '\n' ;
				dp[i][j][0] = dp[i-1][j-1][0]+1;
				dp[i][j][1] = dp[i-1][j-1][1];
				if ( dp[i][j][1] == 0) dp[i][j][1] = 1;
			}else
			{
				if (dp[i-1][j][0] > dp[i][j-1][0])
				{
					dp[i][j][0] = dp[i-1][j][0];
					dp[i][j][1] = dp[i-1][j][1];
				}
				else 
				{
					dp[i][j][0] = dp[i][j-1][0];
					dp[i][j][1] = dp[i][j-1][1];

					if (dp[i-1][j][0] == dp[i][j-1][0])
						dp[i][j][1] = dp[i-1][j][1]+dp[i][j-1][1]-dp[i-1][j-1][1];
				}
			}
		}

	//cout << m << ' ' << n << ' '<<dp[n][m][0] << ' ' <<dp[n][m][1];
	ofstream fout("subsir.out");
		fout << dp[n][m][1];
	return 0;
}