比赛 |
2025暑期集训第4场 |
评测结果 |
AAAAAAA |
题目名称 |
加分二叉树 |
最终得分 |
100 |
用户昵称 |
ChenBp |
运行时间 |
0.018 s |
代码语言 |
C++ |
内存使用 |
3.72 MiB |
提交时间 |
2025-07-05 09:51:44 |
显示代码纯文本
#include <iostream>
#include <algorithm>
#include <cstdio>
#define ll long long
using namespace std;
int n;
int fs[35];
ll f[35][35];
int rt[35][35];
ll dfs(int l,int r){//cout<<l<<" "<<r<<endl;
if(l>r) return 1;
if(l==r){
return fs[l];
}
if(f[l][r]) return f[l][r];
// f[l][r]=max(dfs(l+1,r)+fs[l],dfs(l,r-1)+fs[r]);
// for(int i=l+1;i<=r-1;i++){
// f[l][r]=max(f[l][r],dfs(l,i-1)*dfs(i+1,r)+fs[i]);
// }
int t;
for(int i=l;i<=r;i++){
// f[l][r]=max(f[l][r],dfs(l,i-1)*dfs(i+1,r)+fs[i]);=
t=dfs(l,i-1)*dfs(i+1,r)+fs[i];
if(t>f[l][r]){
f[l][r]=t;
rt[l][r]=i;
}
}
return f[l][r];
}
void pr(int l,int r){
if(l>r) return;
if(l==r){
cout<<l<<" ";
return;
}
cout<<rt[l][r]<<" ";
pr(l,rt[l][r]-1);
pr(rt[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>>fs[i];
}
cout<<dfs(1,n)<<endl;
// for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++){
// cout<<rt[i][j]<<" ";
// }
// cout<<endl;
// }
pr(1,n);
return 0;
}