Cod sursa(job #370103)

Utilizator DraStiKDragos Oprica DraStiK Data 30 noiembrie 2009 10:32:37
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <algorithm>
using namespace std;

#define ll long long
#define INF (1ll<<60)
#define DIM 505

bool viz[DIM][DIM];
ll best[DIM][DIM];
int d[DIM];
int n;

void read ()
{
    int i;

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

void solve ()
{
    int i,j,k,dst;

    for (i=1; i<n; ++i)
        best[i][i+1]=(ll)d[i-1]*d[i]*d[i+1];
    for (dst=2; dst<n; ++dst)
        for (i=1; i<=n-dst; ++i)
        {
            best[i][j=i+dst]=INF;
            for (k=i; k<j; ++k)
                best[i][j]=min (best[i][j],best[i][k]+best[k+1][j]+(ll)d[i-1]*d[k]*d[j]);
        }
    printf ("%lld",best[1][n]);
}

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

    read ();
    solve ();

    return 0;
}