Pagini recente » Cod sursa (job #2735785) | Rezultatele filtrării | Cod sursa (job #598477) | Cod sursa (job #2601998) | Cod sursa (job #404257)
Cod sursa(job #404257)
/*
@ Mihai Tabara, 2010
Method: PD
O(n^3) - time
O(N^2) - memory
*/
#include <fstream>
#include <climits>
using namespace std;
const char* in = "podm.in";
const char* out = "podm.out";
const int NMAX = 505;
const long long INF = LLONG_MAX;
long long M[NMAX][NMAX];
long long P[NMAX];
int N;
long long Mat ( int i, int j, long long& ref )
{
int k, Q;
if ( ref[i][j] < INF )
return ref[i][j];
if ( i == j )
m[i][j] = 0;
else
{
for ( k = i; k <= j-1; ++k )
{
Q = Mat ( i, k, ref ) + Mat ( k+1, j, ref ) + P[i-1] * P[k] * P[j];
if ( Q < ref[i][j] )
ref[i][j] = Q;
}
}
return ref[i][j];
}
int main ( void )
{
freopen ( in, "r", stdin );
freopen ( out, "w", stdout );
scanf ( "%d", &N );
int i, l, k, j;
for ( i = 0; i <= N; scanf ( "%lld", P+i++ ) );
for ( i = 1; i <= N; ++i )
for ( j = 1; j <= N; ++j )
M[i][j] = INF;
printf ( "%lld\n", Mat( i, j, M ) );
return 0;
}