Pagini recente » Cod sursa (job #812611) | Cod sursa (job #2647512) | Cod sursa (job #2512870) | Cod sursa (job #2713094) | Cod sursa (job #2182627)
#include <fstream>
using namespace std;
ifstream cin("subsir.in");
ofstream cout("subsir.out");
string s1, s2;
int d[505][505], nr[505][505];
int main()
{
cin >> s1 >> s2;
nr[0][0] = 1;
for (int i = 0; i < 502; ++i) {
nr[i][0] = nr[0][i] = 1;
}
for (int i = 0; i < s1.size(); ++i) {
for (int j = 0; j < s2.size(); ++j) {
if (s1[i] == s2[i]) {
d[i + 1][j + 1] = d[i][j] + 1;
nr[i + 1][j + 1] = nr[i][j];
}
else {
if (d[i][j + 1] == d[i + 1][j]) {
d[i + 1][j + 1] = d[i + 1][j];
nr[i + 1][j + 1] = nr[i + 1][j] + nr[i][j + 1] - nr[i][j];
}
else if (d[i][j + 1] < d[i + 1][j]) {
d[i + 1][j + 1] = d[i][j + 1];
nr[i + 1][j + 1] = nr[i][j + 1];
}
else {
d[i + 1][j + 1] = d[i + 1][j];
nr[i + 1][j + 1] = nr[i + 1][j];
}
}
}
}
cout << nr[s1.size()][s2.size()];
return 0;
}