https://www.it610.com/article/1292725406771781632.htm
1.第一短的带第二短,然后第一短的回来
2.第一张带第二张,然后第二短回来
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n,i,b,T;
cin >> T;
while(T--)
{
cin >> n;
vector<int> time(n, 0);
for(i=0;i < n ; i++)
{
cin >> time[i];
}
sort(time.begin(),time.end());
int sum=0;
while(n>3)
{
if(2*time[1]+time[0]>2*time[0]+time[n-2])
sum+=2*time[0]+time[n-2]+time[n-1];
else
sum+=2*time[1]+time[0]+time[n-1];//最短的带第二短的, 然后最长的带第二长的 , 然后第二短的回来
n-=2;
}
if(n==3)
sum+=time[1]+time[0]+time[2];
if(n==2)
sum+=time[1];
if(n==1) sum += time[0];
cout << sum << endl;
}
return 0;
}