https://vjudge.net/contest/280305#problem/B
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,i,j,k,kk,dp[1000][1000],a[10000];
int main()
{
while (~scanf("%d",&n)){
memset(dp,0x3f3f3f,sizeof(dp));
for (i=1; i<=n; i++)
dp[i][i]=0;
for (i=1; i<=n; i++)
scanf("%d",&a[i]);
for (int len=2; len<n; len++)
for (i=2; i<=n; i++)
{
kk=i+len-1;
if (kk>n) break;
for (k=i; k<kk; k++)
dp[i][kk]=min(dp[i][kk],dp[i][k]+dp[k+1][kk]+a[i-1]*a[k]*a[kk]);
}
printf("%d\n",dp[2][n]);
}
}