P1809 过河问题
#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
#include<limits.h>
using namespace std;
long long a[100005];
long long dh(long long a[],int n)
{
long long sumt=0;
int m=n;
while(m>=1)
{
if(m==1)
{
sumt+=a[1];
break;
}else if(m==2)
{
sumt+=a[2];
break;
}else if(m==3)
{
sumt+=a[1]+a[2]+a[3];
break;
}else{
int a1=a[m]+a[1]+a[m-1]+a[1];
int a2=a[2]+a[1]+a[m]+a[2];
sumt+=min(a1,a2);
m-=2;
}
}
return sumt;
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a,a+n+1);
cout<<dh(a,n);
return 0;
}