点击打开链接
// main.cpp
// test
// Created by 吴有堃 on 2017/9/11.
// Copyright © 2017年 吴有堃. All rights reserved.
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <cstring>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <queue>
#include <vector>
#include <map>
#define LL long long
#define inf 0x3f3f3f3f
#define mod 1e9+7
using namespace std;
int N=0,Arr[105],dp[105][105]={0};
//石子合并 区间DP
int main()
{
int len=0,i=0,j=0,k=0;
scanf("%d",&N);
for(i=1;i<=N;i++)scanf("%d",&Arr[i]);
memset(dp, 0, sizeof(dp));
for(len=2;len<=N;len++){
for(i=1;i<=N-len;i++){
j=i+len;
dp[i][j]=inf;
for(k=i+1;k<j;k++){
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+Arr[i]*Arr[k]*Arr[j]);
}
}
}
printf("%d\n",dp[1][N]);
return 0;
}