Pagini recente » Cod sursa (job #1966072) | Cod sursa (job #1211224) | Cod sursa (job #1573708) | Cod sursa (job #1763978) | Cod sursa (job #1344441)
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 505;
const long long inf = (1ll << 62) - 1;
struct Dim {
int a, b;
};
Dim M [N], rez [N][N];
long long dp [N][N];
long long mult (int x1, int y1, int x2, int y2) {
long long ans;
ans = 1ll * rez [x1][y1].a * rez [x1][y1].b * rez [x2][y2].b;
return ans;
}
int main () {
int n, i, x, y, k, h, j;
freopen ("podm.in", "r", stdin);
freopen ("podm.out", "w", stdout);
scanf ("%d%d", &n, &x);
for (i = 2; i <= n + 1; i ++) {
M [i - 1].a = x;
scanf ("%d", &x);
M [i - 1].b = x;
}
for (i = 1; i <= n; i ++) {
for (j = 1; j <= n; j ++)
dp [i][j] = inf;
dp [i][i]= 0;
rez [i][i] = M [i];
rez [i + 1][i + 1] = M [i + 1];
dp [i][i + 1] = mult (i, i, i + 1, i + 1);
rez [i][i + 1].a = M [i].a;
rez [i][i + 1].b = M [i + 1].b;
}
for (k = 3; k <= n; k ++)
for (i = 1; i + k - 1 <= n; i ++) {
j = i + k - 1;
for (h = i + 1; h <= j; h ++)
dp [i][j] = min (dp [i][j], 1ll * dp [i][h - 1] + dp [h][j] + mult (i, h - 1, h, j));
rez [i][j].a = M [i].a;
rez [i][j].b = M [j].b;
}
printf ("%lld\n", dp [1][n]);
return 0;
}