#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<iostream>
#define inf 0x3f3f3f
using namespace std;
int a[1000][3],dp[1000][1000],p,n;
int main()
{
while(scanf("%d",&n) != EOF)//n表示有n个矩阵
{
for(int i = 1 ;i <= n ;i++)
scanf("%d%d",&a[i][1],&a[i][2]);//a[i][1]表示第i个矩阵的行数目
for(int i = 1 ;i <= n ;i++) //a[i][2]表示第i个矩阵的列数目
dp[i][i] = 0;
for(int i = n-1 ;i >= 1 ;i--)//这里最开始写的是i = 1 ; i <= n ;i++
{ //果断不行啊。第一次就把结果算出来了,还没用到
for(int j = i+1 ;j <= n ;j++)//最优子结构呢...幸好写来试试了.不然没搞懂就过了
{
dp[i][j] = inf;
for(int k = i ;k < j ;k++)
{
p = dp[i][k] + dp[k+1][j] + a[i][1]*a[k][2]*a[j][2];
if(p < dp[i][j])
dp[i][j] = p;
}
}
}
printf("%d",dp[2][5]);
}
return 0;
}
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<iostream>
#define inf 0x3f3f3f
using namespace std;
int a[1000][3],dp[1000][1000],p,n;
int main()
{
while(scanf("%d",&n) != EOF)//n表示有n个矩阵
{
for(int i = 1 ;i <= n ;i++)
scanf("%d%d",&a[i][1],&a[i][2]);//a[i][1]表示第i个矩阵的行数目
for(int i = 1 ;i <= n ;i++) //a[i][2]表示第i个矩阵的列数目
dp[i][i] = 0;
for(int i = n-1 ;i >= 1 ;i--)//这里最开始写的是i = 1 ; i <= n ;i++
{ //果断不行啊。第一次就把结果算出来了,还没用到
for(int j = i+1 ;j <= n ;j++)//最优子结构呢...幸好写来试试了.不然没搞懂就过了
{
dp[i][j] = inf;
for(int k = i ;k < j ;k++)
{
p = dp[i][k] + dp[k+1][j] + a[i][1]*a[k][2]*a[j][2];
if(p < dp[i][j])
dp[i][j] = p;
}
}
}
printf("%d",dp[2][5]);
}
return 0;
}