Cod sursa(job #763459)

Utilizator ioana26Ioana Andronescu ioana26 Data 2 iulie 2012 12:37:38
Problema Parantezare optima de matrici Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.94 kb
/*
Parantezare optima de matrici.
*/

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

#define MAXNUM      501

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

int n;
long long dim[MAXNUM], res[MAXNUM][MAXNUM];

long long parantezare () {
    int i, j, k, l;
    for (i = 1; i <= n; i++)
        res[i][i] = 0;

    for (i = 1; i <= n - 1; i++)
        res[i][i + 1] = dim[i - 1] * dim[i] * dim[i + 1];

    for (l = 2; l <= n - 1; l++) {
        for (i = 1; i <= n - l; i++) {
            j = i + l;
            res[i][j] = LLONG_MAX;
            for (k = i; k <= j - 1; k++)
                res[i][j] = min(res[i][j], res[i][k] + res[k + 1][j] + dim[i - 1] * dim[k] * dim[j]);
        }
    }
    return res[1][n];
}

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

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

    printf("%lld\n", parantezare());

    return 0;
}