这是一道贪心的题,贪心的策略有两种,我只想到一种,不停的WA,只有去看别人的了。。。需要每次比较下,看哪种策略好~~
第一种:最快,次快去->最快回--->最慢,次慢去-->次快回(2*a[1]+a[0]+a[n-1])
第二种: 最快,最慢去-->最快回-->最快,次慢去-->最快回(2*a[0]+a[n-1]+a[n-2])
每次需要比较下,决定用哪种策略(我那个n-1,反正n有时候要减一,头都晕了~~~~
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1000+100;
int a[maxn];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
sort(a,a+n);
int sum=0;
while(1)
{
if(n==1)
{
sum+=a[0];
cout<<sum<<endl;
break;
}
else if(n==2)
{
sum+=a[1];
cout<<sum<<endl;
break;
}
else if(n==3)
{
sum+=(a[0]+a[1]+a[2]);
cout<<sum<<endl;
break;
}
else if(n>=3)
{
if(2*a[1]+a[0]+a[n-1]>2*a[0]+a[n-1]+a[n-2])
{
sum+=2*a[0]+a[n-1]+a[n-2];
}
else
{
sum+=2*a[1]+a[0]+a[n-1];
}
n-=2;
}
}
}
return 0;
}