状态:dp[i][i+k]表示i到i+k区间最优解
转移:d[i][i+k]=min(d[i][i+k],d[i][j]+d[j+1][i+k]+a[i-1]*a[j]*a[i+k]);
//解释为j划分区间i到i+k,划分代价为a[i-1]*a[j]*a[i+k]
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3f
int main(){
int d[101][101],n;
int a[101];
while(cin>>n&&n){
for(int i=0; i<n; i++)
cin>>a[i]>>a[i+1];
memset(d,0,sizeof(d));
for(int k=1; k<=n; k++)
for(int i=1;i+k<=n; i++) {
d[i][i+k]=INF;
for(int j=i; j<i+k; j++)
d[i][i+k]=min(d[i][i+k],d[i][j]+d[j+1][i+k]+a[i-1]*a[j]*a[i+k]);
}
cout<<d[1][n]<<endl;
}
return 0;
}