Pagini recente » Cod sursa (job #1112646) | Cod sursa (job #1656438) | Cod sursa (job #944513) | Cod sursa (job #2302493) | Cod sursa (job #2450568)
#include <bits/stdc++.h>
#define BUFFER_SIZE 1 << 30
#define INF 0x3f3f3f3f
char buffer[BUFFER_SIZE];
int pos = BUFFER_SIZE;
long long dp[505][505], d[505];
inline char next() {
if (pos == BUFFER_SIZE) {
fread(buffer, 1, BUFFER_SIZE, stdin);
pos = 0;
}
return buffer[pos++];
}
inline int read() {
int n = 0;
char c = next();
while (!('0' <= c && c <= '9')) {
c = next();
}
while ('0' <= c && c <= '9') {
n = (n << 3) + (n << 1) + (c - '0');
c = next();
}
return n;
}
inline void print(long long n) {
char snum[65];
int i = 0;
do {
snum[i++] = n % 10 + '0';
n /= 10;
} while (n);
--i;
while (i >= 0) {
putchar(snum[i--]);
}
putchar('\n');
}
int min(long long a, long long b) {
return a < b ? a : b;
}
int main() {
freopen("podm.in", "r", stdin);
freopen("podm.out", "w", stdout);
int n = read();
for (int i = 0 ; i <= n ; ++i) {
d[i] = read();
}
for (int i = 1 ; i < n ; ++i) {
dp[i][i + 1] = d[i - 1] * d[i] * d[i + 1];
}
for (int l = 2 ; l < n ; ++l) {
for (int i = 1 ; i <= n - l ; ++i) {
int j = i + l;
dp[i][j] = INF;
for (int k = i ; k < j; ++k) {
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + (d[i - 1] * d[k] * d[j]));
}
}
}
print(dp[1][n]);
return 0;
}