Pagini recente » Cod sursa (job #2942027) | Cod sursa (job #375864) | Cod sursa (job #98371) | Cod sursa (job #120065) | Cod sursa (job #2657045)
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
#define NMAX 500
#define MOD 666013
int dp[NMAX+1][NMAX+1],nr[NMAX+1][NMAX+1];
char a[NMAX],b[NMAX];
int main()
{
FILE *fin,*fout;
fin=fopen("subsir.in","r");
fout=fopen("subsir.out","w");
int i,j,n,m;
fscanf(fin,"%s",a);
fscanf(fin,"%s",b);
n=strlen(a);
m=strlen(b);
for(i=0;i<=n;i++){
nr[i][0]=1;
}
for(j=0;j<=m;j++){
nr[0][j]=1;
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if(a[i]==b[j]){
dp[i][j]=1+dp[i-1][j-1];
nr[i][j]=nr[i-1][j-1]%MOD;
}
else{
dp[i][j]=std::max(dp[i-1][j],dp[i][j-1]);
if(dp[i][j]==dp[i-1][j]){
nr[i][j]=(nr[i][j]+nr[i-1][j])%MOD;
}
else if(dp[i][j]==dp[i][j-1]){
nr[i][j]=(nr[i][j]+nr[i][j-1])%MOD;
}
else if(dp[i][j]==dp[i-1][j-1]){
nr[i][j]=(nr[i][j]-nr[i-1][j-1]+MOD)%MOD;
}
}
}
}
fprintf(fout,"%d",nr[n][m]);
fclose(fin);
fclose(fout);
return 0;
}