Pagini recente » Cod sursa (job #1511791) | Cod sursa (job #1069559) | Cod sursa (job #2972973) | Cod sursa (job #2266029) | Cod sursa (job #1201141)
#include <cstdio>
#define rint register int
#define min(a,b) (((a>b))?(b):(a))
#define max(a,b) (((a<b))?(b):(a))
const char IN[]="podm.in";
const char OUT[]="podm.out";
const int MAX = 514;
using namespace std;
int d[MAX],mat[MAX][MAX];
int main()
{
int n;
freopen(IN,"r",stdin);
freopen(OUT,"w",stdout);
scanf("%d",&n);
for(rint i=0;i<=n;++i)scanf("%d",d+i);
for(rint i=1;i<n;++i)mat[i][i+1]=d[i-1]*d[i]*d[i+1];
for(rint q=2;q<n;++q){
for(rint i=1;i<=n-q;++i){
mat[i][i+q]=mat[i][i+q-1]+d[i-1]*d[i+q-1]*d[i+q];
for(rint k=i;k<=i+q;++k){
mat[i][i+q]=min(mat[i][i+q],mat[i][k]+mat[k+1][i+q]+d[i-1]*d[k]*d[i+q]);
}
}
}
printf("%d\n",mat[1][n]);
return 0;
}