Cod sursa(job #3311225)

Utilizator InformaticianInDevenire1Munteanu Mihnea Gabriel InformaticianInDevenire1 Data 20 septembrie 2025 15:35:59
Problema Subsir Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#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;
}