标签:
Description
Input
Output
Sample Input
1 4 1 2 5 10
Sample Output
17
题解:
这是一个过河坐船问题,一共有两个策略
①最快和次快过去,最快回;最慢和次慢过去,次快回,最快的和次快的过去,t1=a[1]+a[0]+a[n-1]+a[1]+a[1]。②最快和最慢过去,最快回;最快和次快过去,最快回,最快的和次慢的过去,t2=a[n-1]+a[0]+a[1]+a[0]+a[n-2]。选择两者中用时较少的一个策略执行,判断t1与t2大小,只需要判断2a[1]是否大于a[0]+a[n-2],如此便将最慢和次慢送过河,对剩下n-2个人循环处理。注意当n=1、n=2、n=3时直接相加处理即可.
#include<iostream>
#include<algorithm>
using namespace std;
int n,a[1006];
int main()
{
int t,i;
cin>>t;;
while(t--)
{
int f=0;//每次f归0
cin>>n;
for(i=1; i<=n; i++)
cin>>a[i];
sort(a,a+n+1);
while(n)
{
if(n==1)
{
f+=a[1];
break;
}
if(n==2)
{
f+=a[2];
break;
}
if(n==3)
{
f+=a[1]+a[2]+a[3];
break;
}
if(n>3)
{
if(2*a[2]>(a[1]+a[n-1]))
f+=2*a[1]+a[n]+a[n-1];
else
f+=2*a[2]+a[1]+a[n];
n=n-2;//注意循环
}
}
cout<<f<<endl;
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/hfc-xx/p/4659294.html