Cod sursa(job #468524)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 3 iulie 2010 22:51:39
Problema Parantezare optima de matrici Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cmath>

using namespace std;

#define file_in "podm.in"
#define file_out "podm.out"

#define nmax (1<<9)

long long n,d[nmax];
long long m[nmax][nmax];

void citire()
{
    freopen(file_in,"r",stdin);
    freopen(file_out,"w",stdout);

    scanf("%lld", &n);
    for (int i=1;i<=n+1;++i)
         scanf("%lld", &d[i]);

}

#define inf 10000000000000000LL

void solve()
{
     long long h,i,j,minim,k,kmin;

     for (h=1;h<n;++h)
           for (i=1;i<n;++i)
           {
               j=i+h;
               minim=inf;
               for (k=i;k<j;++k)
                     if (minim>m[i][k]+m[k+1][j]+d[i]*d[k+1]*d[j+1])
                     {
                         minim=m[i][k]+m[k+1][j]+d[i]*d[k+1]*d[j+1];
                         kmin=k;
                     }
               m[i][j]=minim;
               m[j][i]=kmin;
           }

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

}

int main()
{
    citire();
    solve();

    fclose(stdin);
    fclose(stdout);

    return 0;
}