Pagini recente » Cod sursa (job #2119141) | Cod sursa (job #2484690) | Cod sursa (job #3124894) | Cod sursa (job #192935) | Cod sursa (job #2646765)
#include <bits/stdc++.h>
using namespace std;
ifstream f("subsir.in");
ofstream g("subsir.out");
const int NMAX = 505;
const int MOD = 666013;
string s1, s2;
int dp[NMAX][NMAX], n, m, nr[NMAX][NMAX];
int main() {
f >> s1;
f >> s2;
m = s2.size();
s1 = "#" + s1;
s2 = "#" + s2;
dp[0][0] = 1;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
if(s1[i] == s2[j]) {
dp[i][j] = 1 + dp[i - 1][j - 1];
if(nr[i - 1][j - 1]) {
nr[i][j] = nr[i - 1][j - 1];
} else {
nr[i][j] = 1;
}
} else {
if(dp[i - 1][j] > dp[i][j - 1]) {
dp[i][j] = dp[i - 1][j];
nr[i][j] = (nr[i][j] + nr[i - 1][j]) % MOD;
} else {
if(dp[i - 1][j] == dp[i][j - 1]) {
dp[i][j] = dp[i - 1][j];
nr[i][j] = (nr[i][j] + nr[i - 1][j] + nr[i][j - 1]) % MOD;
} else {
dp[i][j] = dp[i][j - 1];
nr[i][j] = (nr[i][j] + nr[i][j - 1]) % MOD;
}
}
}
}
}
g << nr[n][m];
return 0;
}