最短时间过河

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;

int main()
{
    int T,i,n;
    scanf("%d",&T);
    while(T--)
    {   int a[1100]={0},s=0;
       scanf("%d",&n);
       for(i=0;i<n;i++)
       scanf("%d",&a[i]);
       sort(a,a+n);
       while(n>3)
       {
         s += min( a[n-1]+a[0]+2*a[1], a[n-1]+a[n-2]+2*a[0] );
         a[n-1] = a[n-2] = 0;
         n-=2;
       }
       if(n==1)
       s += a[0];
       else if(n==2)
       s += a[1];
       else
       s += a[0]+a[1]+a[2];
       printf("%d\n",s);
    }
  
    return 0;
}

posted @ 2013-08-15 17:34  hpu张亚飞  阅读(307)  评论(0编辑  收藏  举报