Cod sursa(job #1328402)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 28 ianuarie 2015 12:20:07
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream>

using namespace std;

ifstream fin( "podm.in" );
ofstream fout( "podm.out" );

const int nmax = 500;
const long long inf = (1LL << 62);
int a[ nmax + 1 ];
long long d[ nmax + 1 ][ nmax + 1 ];

int main() {
    int n;
    long long mn;
    fin >> n;
    for( int i = 0; i <= n; ++ i ) {
        fin >> a[ i ];
    }
    for( int i = 1; i < n; ++ i ) {
        d[ i ][i + 1] = a[i - 1] * a[ i ] * a[i + 1];
    }
    for( int l = 2; l < n; ++ l ) {
        for( int i = 1; i <= n - l; ++ i ) {
            mn = inf;
            for( int k = i; k < i + l; ++ k ) {
                if ( mn > d[ i ][ k ] + d[k + 1][i + l] + (long long)a[i - 1] * a[ k ] * a[i + l] ) {
                    mn = d[ i ][ k ] + d[k + 1][i + l] + (long long)a[i - 1] * a[ k ] * a[i + l];
                }
            }
            d[ i ][ i + l ] = mn;
        }
    }
    fout << d[ 1 ][ n ] << "\n";
    fin.close();
    fout.close();
    return 0;
}