#include <iostream>
#include <cstring>
#define N 35
using namespace std;
int n,f[N][N],root[N][N];
void p(int l,int r){
if(l>r)return ;
cout<<root[l][r]<<" ";
if(l==r)return ;
p(l,root[l][r]-1);
p(root[l][r]+1,r);
}
int main(){
cin>>n;
for(int i=1;i<=n;++i){
cin>>f[i][i];
f[i][i-1]=1;
root[i][i]=i;
}
for(int len=2;len<=n;++len){
for(int l=1;l+len-1<=n;++l){
int r=l+len-1;
f[l][r]=f[l+1][r]+f[l][l];
root[l][r]=l;
for(int k=l+1;k<=r-1;++k){
if (f[l][r]<f[l][k-1]*f[k+1][r]+f[k][k]){
f[l][r]=f[l][k-1]*f[k+1][r]+f[k][k];
root[l][r]=k;
}
}
}
}
cout<<f[1][n]<<endl;
p(1,n);
return 0;
}
题面中提到,答案不超过 4×1e9,即unsigned int,但我的这份代码只开了int,却ac了