/*
zoj_1579 贪心
送两个人过桥为一轮进行循环,设a,b,c,d为要过桥的四个人(其中a<b<c<d)
第一种方式:a,b过桥,a回来
a,c过桥,a回来
a,d过桥。
第二种方式:a,b过桥,a回来
c,d过桥,b回来
a,b过桥。
即比较 a+2*b+d,2*a+c+d的大小。
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
long long p[100010];
int main()
{
long long n,i,sum;
while( scanf( "%d",&n )!=EOF )
{
for( i=0;i<n;i++ )
scanf( "%lld",&p[i] );
sort( p,p+n );
if( n==0 ) printf( "0\n" );
else if( n==1 ) printf( "%lld\n",p[0] );
else if( n==2 ) printf( "%lld\n",p[1] );
else if( n==3 ) printf( "%lld\n",p[0]+p[1]+p[2] );
else
{
sum=0;
for( i=n-1;i>=3;i-=2 )
sum+=min( p[0]+2*p[1]+p[i],2*p[0]+p[i-1]+p[i] );
if( n%2==0 ) sum+=p[1];
else sum+=( p[0]+p[1]+p[2] );
printf( "%lld\n",sum );
}
}
return 0;
}
zoj 1579 Bridge
最新推荐文章于 2022-02-25 21:57:21 发布