Cod sursa(job #2297598)

Utilizator AndreiTudorAndrei Tudor AndreiTudor Data 6 decembrie 2018 09:25:58
Problema Parantezare optima de matrici Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#define MAXN 500
#define INF 100000000000000000LL

using namespace std;

long long d[1+MAXN+5], p[1+MAXN+5][1+MAXN+5];

inline long long minim( long long a, long long b )
{
  if( a>b )
    a=b;

  return a;
}

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

  int n;

  scanf( "%d", &n );

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

  for( int i=1;i<=n-1;i++ )
    p[i][i+1]=d[i-1]*d[i]*d[i+1];

  for( int j=2;j<=n-1;j++ )
    for( int i=1;i<=n-j;i++ )
    {
      p[i][i+j]=INF;

      for( int k=i;k<=i+j-1;k++ )
        p[i][i+j]=minim(p[i][i+j],p[i][k]+p[k+1][i+j]+d[i-1]*d[k]*d[i+j]);
    }

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

  return 0;
}