Cod sursa(job #794821)

Utilizator TeodoraTanaseTeodora Tanase TeodoraTanase Data 7 octombrie 2012 02:04:12
Problema Parantezare optima de matrici Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>

#define min(a, b) ((a < b) ? a : b)

#define LGMAX 501
#define INF 0x03f3f3f3f3f

using namespace std;

FILE *inFile = fopen ("podm.in", "r");
FILE *outFile = fopen ("podm.out", "w");

int n;
long long d[LGMAX];
long long s[LGMAX][LGMAX];

void read()
{
    fscanf (inFile, "%d\n", &n);

    for (int i = 0; i <= n; ++i)
        fscanf (inFile, "%lld ", &d[i]);
}

long long solve()
{
    for (int i = 1; i < n; ++i)
        s[i][i + 1] = d[i - 1] * d[i] * d[i + 1];

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

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

    return s[1][n];
}

int main()
{
    read();
    fprintf (outFile, "%lld", solve());

    return 0;
}