Cod sursa(job #914078)

Utilizator Sm3USmeu Rares Sm3U Data 13 martie 2013 21:26:24
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <cstdio>

#define nMax 550
#define min(a, b) ((a < b) ? a : b)

using namespace std;

int n;
long long d[nMax];
long long m[nMax][nMax];

void citire(){
    scanf("%d", &n);
    for(int i = 0; i <= n; ++ i){
        scanf("%lld", &d[i]);
    }
}

void rez(){
    for(int i = 1; i < n; ++i)
        m[i][i + 1] = d[i - 1] * d[i] * d[i + 1];

    for(int p = 2; p < n; ++ p){
        for(int i = 1; i <= n - p; ++i){
            int j = p + i;
            m[i][j] = m[i][i] + m[i + 1][j] + d[i - 1] * d[i] * d[j];
            for(int k = i + 1; k < j; ++k){
                m[i][j] = min(m[i][j], m[i][k] + m[k + 1][j] + d[i - 1] * d[k] * d[j]);
            }
        }
    }
    printf("%lld\n", m[1][n]);
}

int main()
{
    freopen("podm.in", "r", stdin);
    freopen("podm.out", "w", stdout);

    citire();
    rez();

    return 0;
}