就是区间dp,c++引用真的是优雅
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
#define DEBUG
const int maxn=1000+5,maxv=26,INF=0x3f3f3f3f;
int t,n,m[maxn],dp[maxn][maxn];
int main(){
#ifdef DEBUG
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
cin>>t;
while(t--){
cin>>n;
n=n+1;
memset(dp,0x3f,sizeof(dp));
for(int i=0;i<n;i++) cin>>m[i];
for(int p=0;p<=n-1;p++){
for(int i=0;i+p<=n-1;i++){
int& tt=dp[i][i+p];
for(int j=i;j<=i+p;j++){
if(p<=1){tt=0;continue;}
tt=min(tt,dp[i][j]+dp[j][i+p]+m[i]*m[j]*m[i+p]);
}
}
}
printf("%d\n",dp[0][n-1] );
}
#ifdef DEBUG
fclose(stdin);
fclose(stdout);
#endif
return 0;
}