Cod sursa(job #495519)

Utilizator SpiderManSimoiu Robert SpiderMan Data 25 octombrie 2010 18:52:50
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
# include <cstdio>

typedef long long ll ;
const char *FIN = "podm.in", *FOU = "podm.out" ;
const int MAX = 505 ;

ll best[MAX][MAX] ;
int d[MAX] ;
int N ;

inline ll min ( ll A, ll B ) {
    return ( A < B ? A : B ) ;
}

int main ( void ) {
    freopen ( FIN, "r", stdin ) ;

    scanf ( "%d", &N ) ;
    for ( int i = 0; i <= N; ++i ) {
        scanf ( "%d", d + i ) ;
    }

    for ( int i = 1; i < N; ++i ) {
        best[i][i + 1] = d[i - 1] * d[i] * d[i + 1] ;
    }
    for ( int ax = 2; ax < N; ++ax ) {
        for ( int i = 1; i <= N - ax; ++i ) {
            int j = ax + i ;
            best[i][j] = 100000000000000LL ;
            for ( int k = i; k < j; ++k ) {
                best[i][j] = min ( best[i][j], best[i][k] + best[k + 1][j] + d[i - 1] * d[k] * d[j] ) ;
            }
        }
    }

    fprintf ( fopen ( FOU, "w" ) , "%lld", best[1][N] ) ;
}