比赛 |
2025暑期集训第4场 |
评测结果 |
AAAAAAA |
题目名称 |
加分二叉树 |
最终得分 |
100 |
用户昵称 |
小福鑫 |
运行时间 |
0.020 s |
代码语言 |
C++ |
内存使用 |
3.67 MiB |
提交时间 |
2025-07-05 10:19:13 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int n,a[101],f[101][101],p[101][101];
void print(int l,int r){
if(l>r){
return;
}
cout<<p[l][r]<<" ";
if(l==r){
return;
}
print(l,p[l][r]-1);
print(p[l][r]+1,r);
}
int main(){
freopen("jfecs.in","r",stdin);
freopen("jfecs.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
f[i][j]=1;
}
f[i][i]=a[i],p[i][i]=i;
}
for(int len=2;len<=n;len++){
for(int l=1,r=l+len-1;r<=n;l++,r++){
p[l][r]=l;
f[l][r]=f[l+1][r]+f[l][l];
for(int k=l;k<=r;k++){
p[l][r]=(f[l][k-1]*f[k+1][r]+a[k]>f[l][r])?k:p[l][r];
f[l][r]=max(f[l][r],f[l][k-1]*f[k+1][r]+a[k]);
}
}
}
cout<<f[1][n]<<endl;
print(1,n);
}