Pagini recente » Cod sursa (job #944121) | Cod sursa (job #373328) | Cod sursa (job #1579430) | Cod sursa (job #984259) | Cod sursa (job #1095729)
#include <cstdio>
using namespace std;
#define minim(a,b) ((a<b)?(a):(b))
#define NMAX 505
#define oo (1LL<<60)
int N;
long long Dim[NMAX];
long long DP[NMAX][NMAX];
void Read()
{
freopen("podm.in","r",stdin);
scanf("%d",&N);
for(int 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(int i=1;i<=N;i++)
DP[i][i+1] = Dim[i-1] * Dim[i] * Dim[i+1];
for(int dif=2; dif < N; dif++)
for(int i=1; i+dif <=N; i++)
{
int j = i+dif;
DP[i][j] = oo;
for(int 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;
}