比赛 2025暑期集训第4场 评测结果 AAAAAAA
题目名称 加分二叉树 最终得分 100
用户昵称 李奇文 运行时间 0.020 s
代码语言 C++ 内存使用 3.71 MiB
提交时间 2025-07-05 09:15:06
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=31;
int n,f[N][N],rt[N][N];
void qxbl(int l,int r){
	if(l==r){
		cout<<rt[l][r]<<" ";
		return;
	}
	if(l>r) return;
	cout<<rt[l][r]<<" ";
	qxbl(l,rt[l][r]-1);
	qxbl(rt[l][r]+1,r);
	return;
}
int main(){
	freopen("jfecs.in","r",stdin);
	freopen("jfecs.out","w",stdout);
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>f[i][i];
		f[i][i-1]=1;
		rt[i][i]=i;
	}
	for(int k=1;k<n;k++){
		for(int l=1;l+k<=n;l++){
			int r=l+k;
			f[l][r]=f[l+1][r]+f[l][l];
			rt[l][r]=l;
			for(int i=l+1;i<r;i++){
				int res=f[l][i-1]*f[i+1][r]+f[i][i];
				if(f[l][r]<res){
					f[l][r]=res;
					rt[l][r]=i;
				}
			}
		}
	}
	cout<<f[1][n]<<endl;
	qxbl(1,n);
	return 0;
}