Cod sursa(job #2618988)

Utilizator CraniXortDumitrescul Eduard CraniXort Data 26 mai 2020 17:50:53
Problema Pedefe Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <bits/stdc++.h>
#define maxn 505
std::ifstream fin ("pedefe.in");
std::ofstream fout ("pedefe.out");

int x1[maxn];
int x2[maxn];
int x3[maxn];

int dp[maxn][maxn][maxn];

int main(){

    int n1, n2, n3, i, j ,k, ii, jj, kk;
    fin >> n1 >> n2 >> n3;
    for (i=1; i<=n1; i++)
        fin >> x1[i];
    for (i=1; i<=n2; i++)
        fin >> x2[i];
    for (i=1; i<=n3; i++)
        fin >> x3[i];

    dp[0][0][0] = 1;
    for (k=1; k<=n3; k++){
        for (i=1; i<=n1; i++){
            for (j=1; j<=n2; j++){

                if (x1[i] == x2[j] and x2[j] == x3[k]){
                    for (ii=0; ii<i; ii++){
                        for (jj=0; jj<j; jj++){
                            if (x1[ii] <= x1[i])
                            dp[k][i][j] += dp[k-1][ii][jj];
                        }
                    }
                }
                if (x1[i] == x2[j] and x1[i] != x3[k]){
                    for (ii=0; ii<i; ii++){
                        for (jj=0; jj<j; jj++){
                            if (x1[ii] <= x1[i])
                            dp[k][i][j] += dp[k][ii][jj];
                        }
                    }
                }
            }
        }
    }
    /*
    for (k=1; k<=n3; k++){
        for (i=1; i<=n1; i++, fout << '\n')
            for (j=1; j<=n2; j++)
            fout << dp[k][i][j] << ' ';
        fout << "**********\n";
    }
    */

    int max = 0;
    for (i=1; i<=n1; i++)
        for (j=1; j<=n2; j++)
        max = std::max (max, dp[n3][i][j]);

    fout << max << '\n';

    return 0;
}