Pagini recente » Cod sursa (job #1633293) | Cod sursa (job #9942) | Cod sursa (job #1585380) | Cod sursa (job #1858991) | Cod sursa (job #432004)
Cod sursa(job #432004)
#include <cstdio>
using namespace std;
#define inf 92233720368547758LL
#define NMAX 510
long long n, x[NMAX];
long long memo[NMAX][NMAX];
long long calculate(long left, long right)
{
return (long long)(x[left] * x[left + 1] * x[right]);
}
void just_do_it(long left, long right)
{
if (memo[left][right] != -1)
return;
if (right - left == 2)
{
memo[left][right] = (long long)(calculate(left, right));
return;
}
long long minim = inf;
for (long i = left + 1; i <= right - 1; ++i)
{
just_do_it(left, i);
just_do_it(i, right);
long long rez = (long long)(memo[left][i] + memo[i][right] + x[left] * x[i] * x[right]);
minim = minim > rez ? rez : minim;
}
memo[left][right] = (long long)(minim == inf ? 0 : minim);
}
int main()
{
freopen ("podm.in", "rt", stdin);
freopen ("podm.out", "wt", stdout);
scanf("%lld", &n);
for (long i = 1; i <= n + 1; ++i)
scanf("%lld", &x[i]);
for (long i = 1; i <= n + 1; ++i)
for (long j = 1; j <= n + 1; ++j)
memo[i][j] = -1;
just_do_it(1, n + 1);
printf("%lld\n", memo[1][n + 1]);
return 0;
}