P1063
模板区间dp.
懒癌,于是把石子合并copy了一下。
#include<bits/stdc++.h>
using namespace std;
int m[310],dp[310][310],anss,ans;
int main() {
ios::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>m[i];
for(int i=1;i<=n;i++)m[n+i]=m[i];
for(int s=1;s<n;s++){
for(int l=1;l+s<=n*2;l++){
dp[l][l+s]=0;
for(int i=1;i<=s;i++){
dp[l][l+s]=max(dp[l][l+s],dp[l][l+i-1]+dp[l+i][l+s]+m[l]*m[l+i]*m[l+s+1]);
}
}
}
ans=0;
for(int i=1;i<=n;i++)ans=max(dp[i][n+i-1],ans);
cout<<ans;
}