Cod sursa(job #1749886)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 29 august 2016 01:56:08
Problema Pedefe Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
/*
 * Brut, urmeaza sa il optimizez...
 */
#include <bits/stdc++.h>
using namespace std;

ifstream in ( "pedefe.in"  );
ofstream out( "pedefe.out" );

const int DIM = 5e2 + 5;
const int MOD = 666013;

int dp[2][DIM][DIM], n, m, p, ans;
int a[DIM], b[DIM], c[DIM];

void add( int &x, int y ) {
    x += y;

    if( x >= MOD )
        x -= MOD;

    return;
}

int main( void ) {

    in >> n >> m >> p;
    for( int i = 1; i <= n; i ++ ) in >> a[i];
    for( int j = 1; j <= m; j ++ ) in >> b[j];
    for( int k = 1; k <= p; k ++ ) in >> c[k];

    dp[0][0][0] = 1;
    for( int k = 1, l = 1; k <= p; k ++, l = 1 - l ) {
        for( int i = 1; i <= n; i ++ ) {
        for( int j = 1; j <= m; j ++ ) {
            if( a[i] != b[j] )
                continue;

            for( int ii = i - 1; ii >= 0; ii -- ) {
            for( int jj = j - 1; jj >= 0; jj -- ) {
                if( a[ii] <= a[i] ) {
                    if( a[i] != c[k] )
                        add( dp[l][i][j], dp[l - 0][ii][jj] );
                    else
                        add( dp[l][i][j], dp[1 - l][ii][jj] );
                }
            }}

            if( k == p )
                add( ans, dp[l][i][j] );
        }}

        for( int i = 0; i <= n; i ++ )
        for( int j = 0; j <= m; j ++ )
            dp[1 - l][i][j] = 0;
    }

    out << ans;
    return 0;
}