比赛 |
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;
}