Pagini recente » Cod sursa (job #1785951) | Cod sursa (job #2967636) | Cod sursa (job #1791148) | Cod sursa (job #1566799) | Cod sursa (job #1095721)
#include <cstdio>
using namespace std;
#define minim(a,b) ((a<b)?(a):(b))
#define NMAX 505
#define oo (1LL<<60)
long long N;
long long Dim[NMAX];
long long DP[NMAX][NMAX];
void Read()
{
freopen("podm.in","r",stdin);
scanf("%lld",&N);
for(long long i=0;i<=N;i++)
scanf("%lld",&Dim[i]);
}
void Solve()
{
//DP[i][j] = numarul minim de calcule ce sunt necesare pentru a inmulti matricile de la i la j
for(long long i=1;i<=N;i++)
DP[i][i+1] = Dim[i-1] * Dim[i] * Dim[i+1];
for(long long dif=2; dif < N; dif++)
for(long long i=1; i+dif <=N; i++)
{
long long j = i+dif;
DP[i][j] = oo;
for(long long k=i;k<j;k++)
DP[i][j] = minim(DP[i][j], DP[i][k] + DP[k+1][j] + Dim[i-1] * Dim[k] * Dim[j]);
}
}
void Print()
{
freopen("podm.out","w",stdout);
printf("%lld\n",DP[1][N]);
}
int main()
{
Read();
Solve();
Print();
return 0;
}