Pagini recente » Cod sursa (job #2858553) | Cod sursa (job #2974107) | Cod sursa (job #2440086) | Cod sursa (job #498334) | Cod sursa (job #2320574)
#include <bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
ifstream f("subsir.in");
ofstream g("subsir.out");
int n,m,i,j;
pair<int,int> dyn[510][510];
string s1,s2;
int main()
{
f>>s1>>s2;
n=s1.size();m=s2.size();
for(i=0;i<=n;i++)
dyn[i][0]={0,1};
for(j=1;j<=m;j++)
dyn[0][j]={0,1};
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(s1[i-1]==s2[j-1])
{
dyn[i][j]=dyn[i-1][j-1];
dyn[i][j].first++;
}
else
if(dyn[i-1][j].first>dyn[i][j-1].first)
dyn[i][j]=dyn[i-1][j];
else
if(dyn[i-1][j].first<dyn[i][j-1].first)
dyn[i][j]=dyn[i][j-1];
else
{
dyn[i][j].second=(dyn[i-1][j].second+dyn[i][j-1].second)%mod;
dyn[i][j].first=dyn[i-1][j].first;
if(dyn[i-1][j-1].first==dyn[i][j].first)
dyn[i][j].second=(dyn[i][j].second+mod-dyn[i-1][j-1].second)%mod;
}
// for(i=1;i<=n;i++)
// {
// for(j=1;j<=m;j++)
// g<<dyn[i][j].first<<'|'<<dyn[i][j].second<<' ';
// g<<'\n';
// }
g<<dyn[n][m].second;
return 0;
}