Pagini recente » Cod sursa (job #2680002) | Cod sursa (job #665721) | Cod sursa (job #115141) | Cod sursa (job #1074900) | Cod sursa (job #763459)
Cod sursa(job #763459)
/*
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;
}