Pagini recente » Cod sursa (job #3164849) | Cod sursa (job #1626987) | Cod sursa (job #105327) | Cod sursa (job #2440148) | Cod sursa (job #1740596)
#include <cstdio>
#include <cstdlib>
#include <climits>
int main() {
int n;
int *d;
long long **m;
int i, j, k, len, q;
freopen("podm.in", "r", stdin);
freopen("podm.out", "w", stdout);
// input
scanf("%d", &n);
d = (int*)malloc((n + 1) * sizeof(int));
for (i = 0; i <= n; ++i) {
scanf("%d", &d[i]);
}
// solve
m = (long long**)malloc((n + 1) * sizeof(long long*));
for (i = 1; i <= n; i++) {
m[i] = (long long*)malloc((n + 1) * sizeof(long long));
}
for (i = 1; i <= n; ++i) {
m[i][i] = 0;
}
for (i = 1; i <= n - 1; ++i) {
m[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
}
for (len = 2; len <= n; ++len) {
for (i = 1; i <= n - len /*+ 1*/; ++i) {
j = i + len /*- 1*/;
m[i][j] = LLONG_MAX;
for (k = 1; k <= j - 1; ++k) {
q = m[i][k] + m[k + 1][j] + d[i - 1] * d[k] * d[j];
if (q < m[i][j]) {
m[i][j] = q;
}
}
}
}
// output
printf("%lld\n", m[1][n]);
// free memory
free(d);
for (i = 1; i <= n; ++i) {
free(m[i]);
}
free(m);
return 0;
}