Pagini recente » Cod sursa (job #2860657) | Cod sursa (job #1482961) | Cod sursa (job #3266247) | Cod sursa (job #1595468) | Cod sursa (job #2735020)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("subsir.in");
ofstream fout ("subsir.out");
char a[501], b[501];
int dp[501][501], nr[501][501];
int main()
{
fin>>a+1; fin.get(); int lena=strlen(a+1);
fin>>b+1; int lenb=strlen(b+1);
for(int i=1; i<=lena; i++)
{
for(int j=1; j<=lenb; j++)
{
if(a[i]==b[j])
{
dp[i][j]=dp[i-1][j-1]+1;
nr[i][j]=nr[i-1][j-1];
if(!nr[i-1][j-1]) nr[i][j]=1;
}else
{
dp[i][j]=max(dp[i][j-1], dp[i-1][j]);
if(dp[i][j-1]>dp[i-1][j]) nr[i][j]=nr[i][j-1];
else if(dp[i][j-1]==dp[i-1][j])
{
nr[i][j]=2*nr[i][j-1];
if(dp[i][j-1]==dp[i-1][j-1]) nr[i][j]-=nr[i][j-1];
}
else if(dp[i][j-1]<dp[i-1][j]) nr[i][j]=nr[i-1][j];
}
}
}
/*for(int i=1; i<=lena; i++)
{
for(int j=1; j<=lenb; j++)
cout<<dp[i][j]<<" ";
cout<<"\n";
}
cout<<"\n";
for(int i=1; i<=lena; i++)
{
for(int j=1; j<=lenb; j++)
cout<<nr[i][j]<<" ";
cout<<"\n";
}*/
fout<<nr[lena][lenb];
return 0;
}