Pagini recente » Cod sursa (job #198442) | Cod sursa (job #1822164) | Cod sursa (job #130499) | Cod sursa (job #1591354) | Cod sursa (job #1072922)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
const int Dmax = 505;
const int MOD = 666013;
ifstream fin("subsir.in");
ofstream fout("subsir.out");
int N, M, DP[Dmax][Dmax], NR[Dmax][Dmax];
char A[Dmax], B[Dmax];
void Initialize()
{
for(int i = 0; i <= N; i++) NR[i][0] = 1;
for(int j = 0; j <= M; j++) NR[0][j] = 1;
}
int main()
{
fin >> (A + 1) >> (B + 1);
N = strlen(A + 1), M = strlen(B + 1);
Initialize();
for(int i=1; i <= N; i++)
for(int j=1; j <= M; j++)
{
if(A[i] == B[j])
{
DP[i][j] = DP[i-1][j-1] + 1;
NR[i][j] = NR[i-1][j-1];
}
else
if(DP[i-1][j] == DP[i][j-1])
{
DP[i][j] = DP[i-1][j];
NR[i][j] = (NR[i-1][j] + NR[i][j-1]) % MOD;
if(DP[i-1][j] == DP[i-1][j-1]) NR[i][j] = (NR[i][j] - NR[i-1][j-1] + MOD) % MOD;
}
else
if(DP[i-1][j] > DP[i][j-1])
{
DP[i][j] = DP[i-1][j];
NR[i][j] = NR[i-1][j];
}
else
{
DP[i][j] = DP[i][j-1];
NR[i][j] = NR[i][j-1];
}
}
fout<<NR[N][M];
fin.close();
fout.close();
return 0;
}