比赛 |
2025暑期集训第4场 |
评测结果 |
AAWWAWA |
题目名称 |
加分二叉树 |
最终得分 |
57 |
用户昵称 |
Lixj |
运行时间 |
0.019 s |
代码语言 |
C++ |
内存使用 |
3.68 MiB |
提交时间 |
2025-07-05 12:11:38 |
显示代码纯文本
#include<iostream>
#include<cmath>
using namespace std;
int a[33],n,f[10][33][33],i,j,l,k;
void work(int x,int y,int z){
if(z==0)return;
cout<<z<<" ";
work(x,z-1,f[2][x][z-1]);
work(z+1,y,f[2][z+1][y]);
return;
}
int main(){
freopen("jfecs.in","r",stdin);
freopen("jfecs.out","w",stdout);
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++){
f[2][i][i]=i;
f[1][i][i]=a[i];
}
//for(int i=1;i<=n;i++)
//co
for(i=1;i<=n;i++)
for(j=1;j<i;j++)
f[1][i][j]=1;
for(l=2;l<=n;l++)
for(i=1;i<=n-l+1;i++){
j=i+l-1;
for(k=i;k<=j;k++)
if(f[1][i][k-1]*f[1][k+1][j]+f[1][k][k]>f[1][i][j]){
f[1][i][j]=f[1][i][k-1]*f[1][k+1][j]+f[1][k][k];
f[2][i][j]=k;
f[3][i][j]=i;
f[4][i][j]=j;
}
}
cout<<f[1][1][n]<<endl;
work(f[3][1][n],f[4][1][n],f[2][1][n]);
return 0;
}