Pagini recente » Cod sursa (job #2721474) | Cod sursa (job #769440) | Cod sursa (job #1518301) | Cod sursa (job #943488) | Cod sursa (job #1015209)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
#define NMAX 505
#define INF (1LL<<62)
#define get_min(a,b) ((a)<(b)?(a):(b))
using namespace std;
ifstream in ( "podm.in" );
ofstream out ( "podm.out" );
long long d[NMAX],DP[NMAX][NMAX];
int N ;
int main ( void )
{
int i , diff , j , k ;
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 -1 ; ++diff )
for ( i = 1 ; i <= N - diff ; ++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] << "\n";
in.close();
out.close();
return 0 ;
}