Pagini recente » Cod sursa (job #978842) | Monitorul de evaluare | Cod sursa (job #253013) | Cod sursa (job #3356384) | Cod sursa (job #3311225)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("subsir.in");
ofstream fout ("subsir.out");
int a[1111],b[1111];
int dp[1111][1111];
vector <int> v;
int dp2[1111][1111];
int main()
{
int n,m;
string S1,S2;
fin >> S1 >> S2;
n = S1.length();
m = S2.length();
int I = n,J = m;
for (int i=1;i<=n;++i){
a[i] = S1[i-1]-'a'+1;
}
for (int i=1;i<=m;++i){
b[i] = S2[i-1]-'a'+1;
}
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;
}else{
dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
}
}
}
for (int i=0;i<=m+1;++i){
dp2[n][i] = 1;
}
for (int i=0;i<=n+1;++i){
dp2[i][m] = 1;
}
for (int i=n-1;i>=1;--i){
for (int j=m-1;j>=1;--j){
dp2[i][j] = dp2[i+1][j]+dp2[i][j+1];
if (a[i+1]==b[i+1]) dp2[i][j] += dp2[i-1][j-1];
}
}
fout << dp2[1][1];
return 0;
}