Pagini recente » Cod sursa (job #819202) | Cod sursa (job #369937) | Cod sursa (job #61494) | Cod sursa (job #2909536) | Cod sursa (job #2461954)
#include <iostream>
#include <fstream>
#include <stack>
#include <cstring>
#define MOD 666013
using namespace std;
ifstream fin("subsir.in");
ofstream fout("subsir.out");
int dp[500][500];
int n,m;
char a[500],b[500];
int nr_solutions[500][500];
void read()
{
char aux[500];
fin.getline(a,500);
strcpy(aux,a+1);
strcpy(a,aux);
fin.getline(b,500);
strcpy(aux,b+1);
strcpy(b,aux);
n=strlen(a);
m=strlen(b);
for(int i=0;i<=n;i++)
nr_solutions[i][0]=1;
for(int j=0;j<=m;j++)
nr_solutions[0][j]=1;
}
bool is_ok(int i, int j)
{
return (i>0 && j>0)?true:false;
}
void solve()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(a[i]==b[j])
{
dp[i][j]=1+dp[i-1][j-1];
nr_solutions[i][j]=nr_solutions[i-1][j-1];
}
else
{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
nr_solutions[i][j]=(nr_solutions[i-1][j]+nr_solutions[i][j-1])%MOD;
if(dp[i-1][j-1]==dp[i-1][j]||dp[i-1][j-1]==dp[i][j-1])
{
nr_solutions[i][j]-=nr_solutions[i-1][j-1];
if(nr_solutions[i][j]>0)
nr_solutions[i][j]%=MOD;
else
nr_solutions[i][j]+=MOD;
}
else
nr_solutions[i][j]=(nr_solutions[i][j]+nr_solutions[i-1][j-1])%MOD;
}
}
}
int main()
{
read();
solve();
fout<<nr_solutions[n][m];
return 0;
}