Mai intai trebuie sa te autentifici.

Cod sursa(job #410091)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 4 martie 2010 09:02:17
Problema Parantezare optima de matrici Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <algorithm>
using namespace std;

typedef int int_32;
typedef long long int int_64;

#define INF 0x3f3f3f3f3f3f3f3fLL
#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 ] );

    memset( sol, INF, sizeof( sol ) );
    for( i = 1; i <= N; ++i ) {

        sol[ i ][ i ] = 0;
        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 ][ j ] + (int_64)dim[ x-1 ] * dim[ k ] * dim[ j ] );

    printf( "%lld", sol[ 1 ][ N ] );

    return 0;
}