#include<iostream>
#include<cstdio>
#include<cstring>
#define int long long
using namespace std;
const int maxn=40;
int n,root[maxn][maxn];
int a[maxn],f[maxn][maxn];
void qian(int L,int R){
if(R<L) return ;
printf("%lld ",root[L][R]);
qian(L,root[L][R]-1);
qian(root[L][R]+1,R);
}
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
for(int i=1;i<=n+1;i++) f[i][i]=a[i],f[i][i-1]=1,root[i][i]=i;
for(int i=n-1;i>=1;i--){
for(int j=i+1;j<=n;j++){
for(int k=i;k<=j;k++){
f[i][j]=max(f[i][k-1]*f[k+1][j]+a[k],f[i][j]);
if(f[i][j]==f[i][k-1]*f[k+1][j]+a[k]) root[i][j]=k;
}
}
}
printf("%lld\n",f[1][n]);
qian(1,n);
return 0;
}
}
样例WA,提交正确;
很明显,22 23行不对;
请求加强数据