Pagini recente » Cod sursa (job #2041297) | Cod sursa (job #1162528) | Cod sursa (job #2840707) | Cod sursa (job #2569753) | Cod sursa (job #2225420)
#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;
}