Pagini recente » Statistici Mustea Tereza (TerezaMustea) | Cod sursa (job #2759940) | Istoria paginii utilizator/strikeia | Istoria paginii utilizator/eduardcfrunza | Cod sursa (job #410864)
Cod sursa(job #410864)
#include <algorithm>
using namespace std;
typedef int int_32;
typedef long long int int_64;
#define INF 1LL<<60
#define MAX_N 505
int_32 N;
int_32 dim[ MAX_N ];
int_64 sol[ MAX_N ][ MAX_N ];
int main() {
freopen( "podm.in", "r", stdin );
freopen( "podm.out", "w", stdout );
int_32 i, j, k, x, y;
scanf( "%d", &N );
for( i = 0; i <= N; ++i )
scanf( "%d", &dim[ i ] );
for( i = 0; i <= N; ++i )
for( j = 0; j <= N; ++j )
sol[ i ][ j ] = INF;
for( i = 1; i <= N; ++i )
sol[ i ][ i ] = 0;
for( i = 1; i < N; ++i )
sol[ i ][ i+1 ] = (int_64)dim[ i-1 ] * dim[ i ] * dim[ i+1 ];
for( j = 3; j <= N; ++j )
for( x = 1, y = j; x <= N && y <= N; ++x, ++y )
for( k = x; k < y; ++k )
sol[ x ][ y ] = min( sol[ x ][ y ], sol[ x ][ k ] + sol[ k+1 ][ y ] + (int_64)dim[ x-1 ] * dim[ k ] * dim[ y ] );
// for( int i = 1; i <= N; ++i ) {
//
// for( int j = 1; j <= N; ++j )
// if( sol[ i ][ j ] == INF )
// printf( "oo " );
// else
// printf( "%lld ", sol[ i ][ j ] );
//
// printf( "\n" );
// }
printf( "%lld", sol[ 1 ][ N ] );
return 0;
}