比赛 2025暑期集训第4场 评测结果 AAWWAWA
题目名称 加分二叉树 最终得分 57
用户昵称 Lixj 运行时间 0.019 s
代码语言 C++ 内存使用 3.68 MiB
提交时间 2025-07-05 12:11:38
显示代码纯文本
#include<iostream>
#include<cmath>
using namespace std;
int a[33],n,f[10][33][33],i,j,l,k;
void work(int x,int y,int z){
    if(z==0)return;
    cout<<z<<" ";
    work(x,z-1,f[2][x][z-1]);
    work(z+1,y,f[2][z+1][y]);
    return;
}
int main(){
	freopen("jfecs.in","r",stdin);
	freopen("jfecs.out","w",stdout);
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>a[i];
    for(i=1;i<=n;i++){
        f[2][i][i]=i;
        f[1][i][i]=a[i];
    }
    //for(int i=1;i<=n;i++)
    //co
    for(i=1;i<=n;i++)
        for(j=1;j<i;j++)
            f[1][i][j]=1;
            
    for(l=2;l<=n;l++)
        for(i=1;i<=n-l+1;i++){
            j=i+l-1;
            for(k=i;k<=j;k++)
			    if(f[1][i][k-1]*f[1][k+1][j]+f[1][k][k]>f[1][i][j]){
                	f[1][i][j]=f[1][i][k-1]*f[1][k+1][j]+f[1][k][k];
               		f[2][i][j]=k;
               		f[3][i][j]=i;
                	f[4][i][j]=j;
            }
        }
    cout<<f[1][1][n]<<endl;
    work(f[3][1][n],f[4][1][n],f[2][1][n]);
    return 0;
}