Cod sursa(job #2735020)

Utilizator ioana0211Ioana Popa ioana0211 Data 1 aprilie 2021 18:53:50
Problema Subsir Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#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;
}