比赛 |
2025暑期集训第4场 |
评测结果 |
AAAAAAA |
题目名称 |
加分二叉树 |
最终得分 |
100 |
用户昵称 |
梧叶已同秋雨去 |
运行时间 |
0.019 s |
代码语言 |
C++ |
内存使用 |
3.71 MiB |
提交时间 |
2025-07-05 09:38:24 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,a[35],f[35][35];
int root[35][35];
void p(int l,int r){
if(l>r)return;
cout<<root[l][r]<<" ";
if(l==r)return;
p(l,root[l][r]-1);
p(root[l][r]+1,r);
}
int main(){
freopen("jfecs.in","r",stdin);
freopen("jfecs.out","w",stdout);
cin>>n;
for(int i=0;i<=n+1;i++){
for(int j=0;j<=n+1;j++){
f[i][j]=1;
}
}
for(int i=1;i<=n;i++){
cin>>a[i];
f[i][i]=a[i];root[i][i]=i;
}
for(int d=2;d<=n;d++){
for(int i=1;i<=n-d+1;i++){
int j=i+d-1;
for(int k=i;k<=j;k++){
if(f[i][j]<f[i][k-1]*f[k+1][j]+f[k][k]){
f[i][j]=f[i][k-1]*f[k+1][j]+f[k][k];
root[i][j]=k;//printf("d:%d i:%d j:%d k:%d %d %d\n",d,i,j,k,root[i][j],f[i][j]);
}
// f[i][j]=max(f[i][j],f[i][k-1]*f[k+1][j]+f[k][k])
}
}
}
cout<<f[1][n]<<"\n";
p(1,n);
return 0;
}