借鉴了其他博客的思路整理了一下代码
#include<stdio.h>
#include<iostream>
#include<algorithm>#include<string.h>
using namespace std;
#define INF 9999999
int dp[105][105];
int num[105];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i = 1 ; i <= n ; i ++)
cin>>num[i];
for(int len = 2 ; len < n ; len ++)//枚举长度,从2开始枚举,最大长度为n-1(2到n)
{
for(int i = 2 ; i + len <= n + 1 ; i ++)//从2号下标开始枚举(不需要从1开始,因为在下面的dp公式中已经计算了1,而且1是不能够选出去的).
{
int j = i + len - 1;
dp[i][j] = INF;
for(int k = i ; k < j ; k ++)
dp[i][j] = min(dp[i][j] , dp[i][k] + dp[k + 1][j] + num[i-1]*num[k] * num[j]);
}
}
cout<<dp[2][n]<<endl;
}
}