#include<bits/stdc++.h>
using namespace std;
int n,a[10001],sum=0,flag=0;
void dui(int step,int x)
{
int which,jh,left,right;
if(flag==1) return;
if(step==0)
{
jh=a[1];
a[1]=a[x];
a[x]=jh;
flag=1;
return;
}
if(2*step>x) left=a[step]+1;
else left=a[2*step];
if(2*step+1>x) right=a[step]+1;
else right=a[2*step+1];
if(left<right)
{
which=step*2;
jh=left;
}
else{
which=step*2+1;
jh=right;
}
if(jh<a[step])
{
a[which]=a[step];
a[step]=jh;
dui(which,x);
}
else{
dui(step-1,x);
}
return;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=n,js=2;i>=1;i--,js--)
{
flag=0;
if(js==0)
{
i++;
a[i]=a[i]+a[i+1];
sum+=a[i];
js=2;
}
dui(i,i);
}
sum+=a[2]; sum+=a[1];
printf("%d",sum);
return 0;
}
不知道错在哪里很迷惑