Cod sursa(job #1493752)

Utilizator livliviLivia Magureanu livlivi Data 29 septembrie 2015 21:03:40
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<cstdio>
#define N 500
#define MULT 500000000000001
using namespace std;

long long d[N+1][N+1];
int v[N+1];


long long min(long long a,long long b){
    return (a<b) ? a : b;
}

long long calc(int st,int dr,int k){
    return d[st][k]+d[k+1][dr]+1LL*v[st-1]*v[k]*v[dr];
}

void rec(int st,int dr){
    int i;

    d[st][dr]=MULT;
    for(i=st;i<dr;i++)
        d[st][dr]=min(d[st][dr],calc(st,dr,i));
}

long long solve(int n){
    int i,j;

    for(i=1;i<=n;i++)
        d[i][i]=0;
    for(i=1;i<n;i++)
        d[i][i+1]=1LL*v[i-1]*v[i]*v[i+1];
    for(i=2;i<n;i++)
        for(j=1;j+i<=n;j++)
            rec(j,j+i);

    return d[1][n];
}


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

    scanf ("%d",&n);
    for(i=0;i<=n;i++)
        scanf ("%d",&v[i]);

    printf ("%lld",solve(n));
    return 0;
}