Cod sursa(job #1442304)

Utilizator lilian_ciobanuLilian Ciobanu lilian_ciobanu Data 24 mai 2015 23:29:57
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<cstdio>

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

const long long INF = 100000000000000000;

int main(){
    long long a[505][505];
    long long d[505];
    long long n,i,j,k,m;

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

    scanf("%lld",&n);

    for(i=1; i<=n+1; ++i){
        scanf("%lld", d+i);
    }

    for(i=1; i<=n; ++i){
        a[i][i] = 0;
    }

    for(i=2; i<=n; ++i){
        a[i-1][i] = d[i-1]*d[i]*d[i+1];
    }


    for(k=2; k<n; ++k){
        for(i=1; i<=n-k; ++i){
            m = INF;
            for(j=i; j < i+k; ++j){
                m = min(m,a[i][j] + a[j+1][i+k] + d[i]*d[j+1]*d[i+k+1]);
            }
            a[i][i+k] = m;
        }
    }

    printf("%lld",a[1][n]);

return 0;
}