比赛 2025暑期集训第4场 评测结果 AWWTTTT
题目名称 加分二叉树 最终得分 14
用户昵称 二乾五 运行时间 8.048 s
代码语言 C++ 内存使用 3.51 MiB
提交时间 2025-07-05 11:18:50
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define cl(a) memset(a,0,sizeof a)
#define copy(a,b) copy(begin(a),end(a),begin(b))
#define ld long double
#define dot(x) fixed<<setprecision(x)
#define foru(a,b,c) for(ll a=b;a<=c;a++)
#define sc(x) score[x].second

struct nd{
    ll l=-1,r=-1;
}chui[35];

ll n,add[35],vis[35],score[35];
vector<ll>xxbl;

pair<ll,ll> dfs(ll id,ll l,ll r){// 最大值,根节点
    if(l>r){
        return {1,-1};
    }
    if(l==r){
        return {score[l],l};
    }
    ll maxx=INT_MIN,maxxid;
    foru(rt,l,r){
        pair<ll,ll>laifute,ruaite;
        laifute=dfs((id<<1),l,rt-1),ruaite=dfs((id<<1|1),rt+1,r);
        ll t=laifute.first*ruaite.first+score[rt];
        // maxx=max(maxx,t);
        if(maxx<t){
            maxx=t;
            maxxid=rt;
            chui[rt].l=laifute.second,chui[rt].r=ruaite.second;
        }
    }
    return {maxx,maxxid};
}

void dfsans(ll u){
    // //-
    // cerr<<"test"<<endl;
    // //-
    vis[u]=1;
    xxbl.push_back(u);
    if(chui[u].l!=-1&&!vis[chui[u].l])dfsans(chui[u].l);
    if(chui[u].r!=-1&&!vis[chui[u].r])dfsans(chui[u].r);
}

int main(){
    #ifndef ONLINE_JUDGE
        freopen("jfecs.in" ,"r",stdin );
        freopen("jfecs.out","w",stdout);
    #endif
    ios::sync_with_stdio(false);
    cin.tie(NULL);cout.tie(NULL);
    cin>>n;
    foru(i,1,n){
        cin>>score[i];
    }
    pair<ll,ll>ans=dfs(1,1,n);
    cout<<ans.first<<endl;

    // //-
    // cerr<<ans.second<<endl;
    // for(ll i=1;i<=n;i++){
    //     cerr<<chui[i].l<<" "<<chui[i].r<<endl;
    // }
    // //-

    dfsans(ans.second);
    for(auto v:xxbl){
        cout<<v<<" ";
    }

    // //-
    // cerr<<xxbl.size();
    // //-

    return 0;
}