Pagini recente » Cod sursa (job #577853) | Cod sursa (job #2065853) | Cod sursa (job #375979) | Cod sursa (job #244857) | Cod sursa (job #431946)
Cod sursa(job #431946)
#include <cstdio>
using namespace std;
#define inf 2000000000000000LL
#define NMAX 510
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 (right - left == 2)
{
if (!memo[left][right])
memo[left][right] = 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 = memo[left][i] + memo[i][right] + x[left] * x[i] * x[right];
minim = minim > rez ? rez : minim;
}
memo[left][right] = minim == inf ? 0 : minim;
}
int main()
{
freopen ("podm.in", "rt", stdin);
freopen ("podm.out", "wt", stdout);
scanf("%ld", &n);
for (long i = 1; i <= n + 1; ++i)
scanf("%ld", &x[i]);
just_do_it(1, n + 1);
printf("%lld\n", memo[1][n + 1]);
return 0;
}