Cod sursa(job #763302)

Utilizator ioana26Ioana Andronescu ioana26 Data 1 iulie 2012 16:53:27
Problema Parantezare optima de matrici Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 0.93 kb
/*
Parantezare optima de matrici.
*/

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

#define MAXNUM      500

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

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

long int 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] = INT_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; i++)
        scanf("%ld", &dim[i]);

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

    return 0;
}