Pagini recente » Cod sursa (job #2116322) | Cod sursa (job #316578) | Cod sursa (job #2871157) | Cod sursa (job #3185108) | Cod sursa (job #1126012)
#include <fstream>
#include <algorithm>
#include <vector>
#define INF (1LL<<60)
#define NMAX 505
#define get_min(a,b) ((a)<(b)?(a):(b))
using namespace std;
ifstream in ( "podm.in" );
ofstream out ( "podm.out" );
int N , D[NMAX];
long long DP[NMAX][NMAX] , dif;
int main ( void )
{
int i , j , k ,diff ;
in >> N ;
for ( i = 0 ; i <= N ; ++i )
in >> D[i];
for ( i = 1 ; i <= N ; ++i )
DP[i][i+1] = D[i-1]* D[i]*D[i+1];
for ( diff = 2 ; diff < N ; ++diff )
for ( i = 1 ; i +diff <= N ; ++i )
{
j = i +diff ;
DP[i][j] = INF;
for ( k = i ; k <= j ; ++ k )
DP[i][j] = get_min( DP[i][j] , DP[i][k] + DP[k+1][j] + D[i-1]*D[k]*D[j] );
}
out << DP[1][N];
in.close();
out.close();
return 0 ;
}