Cod sursa(job #794754)

Utilizator gallexdAlex Gabor gallexd Data 6 octombrie 2012 22:45:08
Problema Parantezare optima de matrici Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <cstdio>

#define MINIM(a,b) ((a < b)? (a): (b))

int N;
typedef unsigned long long ull;

ull d[510], M[510][510];

void afisare() {
    for (int i=0; i<N; ++i) {
        for (int j=0; j<N; ++j)
            printf("%6d ", M[i][j]);
        printf("\n");
    }
}

int main () {

    freopen("podm.in","rt",stdin);
    freopen("podm.out","wt",stdout);

    scanf("%d", &N);
    for (int i=0; i<=N; ++i) {
        scanf("%d ", &d[i]);
        if (i>1) M[i-2][i-1]=d[i-2]*d[i-1]*d[i];
    }

    for (int j=2; j<N; ++j) {
        for (int i=0; i+j<N; ++i) {
            M[i][i+j]=~0;
            for (int k=i; k<i+j; ++k)
                M[i][i+j]=MINIM(M[i][i+j], M[i][k] + M[k+1][i+j] + d[i]*d[i+j+1]*d[k+1]);
        }
    }
    //afisare();
    printf("%d", M[0][N-1]);

    return 0;
}