Pagini recente » Cod sursa (job #201155) | Cod sursa (job #844197) | Cod sursa (job #463927) | Cod sursa (job #2069546) | Cod sursa (job #1749886)
/*
* 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;
}