poj 1700 Crossing River

#include <stdio.h>
#include <stdlib.h>

int cmp(const void *x,const void *y)
{
	return *(int *)x-*(int *)y;
}

int Min(int a,int b)
{
	return a<b?a:b;
}

int main()
{
	int ar[1001],n,i,min,m;
	scanf("%d",&m);
	while (m--)
	{
		scanf("%d",&n);
		for(i=0;i<n;i++)scanf("%d",&ar[i]);
		qsort(ar,n,sizeof(int),cmp);
		min=0;
		if (n>=4)
		{
			for (;n>=4;n-=2)
			{
				min+=Min(ar[n-1]+2*ar[1]+ar[0],ar[n-1]+ar[n-2]+2*ar[0]);
			}
		}
		if (n==3)
		{
			printf("%d\n",min+ar[0]+ar[1]+ar[2]);
		}
		else if (n==2)
		{
			printf("%d\n",min+ar[1]);
		}
		else
		{
			printf("%d\n",ar[0]);
		}
	}
	return 0;
}
posted @ 2011-10-20 21:46  104_gogo  阅读(107)  评论(0编辑  收藏  举报