Pagini recente » Cod sursa (job #1694012) | Cod sursa (job #1625315) | Cod sursa (job #750682) | Cod sursa (job #662237) | Cod sursa (job #1289143)
#include <iostream>
#include <cstdio>
using namespace std;
/// A[i]* ... * A[j] = A[i]*...*A[k] * A[k+1]*...*a[j]
/// C[i][j] min{c[i][k] + c[k+1][j] + d[i-1] * d[k] * d[j];
/// Se parcurge diagonal deasupra diag. principale
int d[505], c[505][505];
int n;
void calc(int i, int j)
{
int minim = 0x7fffffff;
for (int k = i; k < j; k++)
{
if (c[i][k] + c[k+1][j] + d[i-1] * d[k] * d[j] < minim)
minim = c[i][k] + c[k+1][j] + d[i-1] * d[k] * d[j];
}
c[i][j] = minim;
}
void solve()
{
for (int i = 1; i <= n; i++)
c[i][i] = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n-i; j++)
calc(j, j+i);
}
int main()
{
freopen("podm.in", "r", stdin);
freopen("podm.out", "w", stdout);
scanf("%d\n", &n);
for (int i = 0; i <= n; i++)
scanf("%d ", &d[i]);
solve();
printf("%d", c[1][n]);
return 0;
}