Cod sursa(job #1546938)

Utilizator DrumeaVDrumea Vasile DrumeaV Data 8 decembrie 2015 21:03:00
Problema Parantezare optima de matrici Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <stdio.h>
#include <string.h>
#include <algorithm>

using namespace std;

typedef long long ll;

const int MN = 502;

int N;
int D[MN];
ll dp[MN][MN];

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

     scanf("%d",&N);

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

     for (int i = 1;i <= N;i++)
         dp[i][i] = 0;

     for (int i = 1;i < N;i++)
         dp[i][i + 1] = 1LL * D[i - 1] * D[i] * D[i + 1];

     for (int k = 2;k < N;k++)
         for (int i = 1;i <= N - k;i++)
         {
             dp[i][i + k] = 0;

             for (int j = i;j <= i + k;j++)
             {
                 ll aux = dp[i][j] + dp[j + 1][i + k] + 1LL * D[i - 1] * D[j] * D[i + k];

                 if (!dp[i][i + k] || dp[i][i + k] > aux)
                    dp[i][i + k] = aux;
             }
         }

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

  return 0;
}