这也是非常经典的一道题目,简单普及一下知识,矩阵乘法拥有结合律,但是没有交换律。
老师讲过,不多说。
#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<memory.h>
using namespace std;
const int MAX_N = 201;
int f[MAX_N][MAX_N];
int R[MAX_N];
int N;
int ans;
int init()
{
scanf("%d",&N);
int i;
for (i=1;i<=N;i++)
scanf("%d",&R[i]),R[i+N]=R[i];
}
int work()
{
int i,j,k;
for (j=1;j<=2*N;j++)
for (i=j-1;i>=1&&j-i<N;i--)
for (k=i;k<j;k++)
f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+R[i]*R[j+1]*R[k+1]);
for (i=1;i<=N;i++)
ans=max(ans,f[i][i+N-1]);
}
int put()
{
printf("%d",ans);
}
int main()
{
init();
work();
put();
return 0;
}