Cod sursa(job #1424229)

Utilizator lucian666Vasilut Lucian lucian666 Data 23 aprilie 2015 19:10:18
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb

//parantezare optima de matrici
#include <iostream>
#include <fstream>
#include <vector>

#define dim 505
#define INF 0x3F3F3F3F

using namespace std;
ofstream out("podm.out");

int n;
typedef long long I64;
I64 v[dim] , bst[dim][dim];

int main()
{
    ifstream in("podm.in");
    in >> n;
    for(int i = 0 ; i <=n ; i++)
        in >> v[i];

    for( int i = 0 ; i < n - 1 ; i++)
        bst[i][i+2] = v[i] * v[i+1] * v[i+2];

    for(int d=3; d<=n; ++d)
    {
        for(int i=0; i+d<=n; ++i)
        {
          int j=i+d;
          I64 best=(1LL << 60);
          for(int k=i+1; k<j; ++k)
          {
            best=min(best,bst[i][k]+bst[k][j]+v[i]*v[k]*v[j]);
          }

          bst[i][j]=best;
        }
    }

    out << bst[0][n];

    return 0;
}