Cod sursa(job #2382091)

Utilizator liviu2000Dragomirescu Liviu liviu2000 Data 17 martie 2019 18:14:11
Problema Subsir Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>
#define N 505
#define MOD 666013

using namespace std;

ifstream fin("subsir.in") ;
ofstream fout("subsir.out") ;

string sir1 , sir2 ;
int dp[N][N] , lg[N][N] ;

int main()
{
    int i , j ;
    fin >> sir1 ;
    fin >> sir2 ;
    sir1 = '#'+sir1 ;
    sir2 = '#'+sir2;
    for ( i = 1 ; i < sir1.size() ; i++ )
    {
        for ( j = 1 ; j < sir2.size() ; j++ )
        {
            if ( sir1[i] == sir2[j] )
            {
                lg[i][j] = lg[i-1][j-1]+1 ;
                if ( lg[i][j] == 1 )
                    dp[i][j] = 1 ;
                else
                    dp[i][j] = dp[i-1][j-1] ;
            }
            else
            {
                lg[i][j] = max(lg[i-1][j],lg[i][j-1]) ;
                if ( lg[i][j] == lg[i-1][j] )
                    dp[i][j] = dp[i][j] + dp[i-1][j] ;
                if ( lg[i][j] == lg[i][j-1] )
                    dp[i][j] = dp[i][j] + dp[i][j-1] ;
                if ( lg[i][j] == lg[i-1][j-1] && lg[i-1][j] == lg[i][j-1] )
                    dp[i][j] = dp[i][j] - dp[i-1][j-1] ;
                dp[i][j] = (dp[i][j]+MOD)%MOD ;
            }
        }
    }
    fout << dp[sir1.size()-1][sir2.size()-1] ;
}