#include<bits/stdc++.h>
using namespace std;
const int maxn=50;
long long dp[maxn][maxn];
int rt[maxn][maxn];
void print(int l,int r)
{
if(rt[l][r]==0) return;
cout<<rt[l][r]<<' ';
if(l==r) return;
print(l,rt[l][r]-1);
print(rt[l][r]+1,r);
}
int main()
{
int n;cin>>n;
for(int i=1;i<=n;i++)
{
cin>>dp[i][i];
rt[i][i]=i;
}
for(int len=2;len<=n;len++)
for(int s=1;s+len-1<=n;s++)
{
int e=s+len-1;
for(int i=s;i<=e;i++)
{
if(i==s)
{
if(dp[i+1][e]+dp[i][i]>dp[s][e])
{
dp[s][e]=dp[i+1][e]+dp[i][i];
rt[s][e]=i;
}
}
else
if(i==e)
if(dp[s][i-1]+dp[i][i]>dp[s][e])
{
dp[s][e]=dp[s][i-1]+dp[i][i];
rt[s][e]=i;
}
else
if(dp[s][i-1]*dp[i+1][e]+dp[i][i]>dp[s][e])
{
dp[s][e]=dp[s][i-1]*dp[i+1][e]+dp[i][i];
rt[s][e]=i;
}
}
}
cout<<dp[1][n]<<endl;
print(1,n);
return 0;
}
感觉没写错但是就是挂了,呜呜