【題目描述】
幾個人過河,每次過兩人一人回,速度由慢者決定,問過河所需最短時間。
【輸入】
輸入t組數據,每組數據第1行輸入n,第2行輸入n個數,表示每個人過河的時間。
【輸出】
輸出t行數據,每行1個數,表示每組過河最少時間。
【輸入樣例】
1 4 1 2 5 10
【輸出樣例】
17
// Created on 2020/2/13
/*#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <climits>*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int idata=100000+5;
int n,m;
int tim[idata];
int len;
bool judge;
int flag;
int minn=INT_MAX;
int sum;
int main()
{
int i,j;
int t;
cin>>t;
while(t--)
{
minn=INT_MAX;
sum=0;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>tim[i];
}
sort(tim+1,tim+1+n);
for(i=n;i>3;i-=2)
{
if(tim[i]+tim[i-1]+tim[1]+tim[1]>
tim[i]+tim[2]+tim[2]+tim[1])
{
sum+=tim[i]+tim[2]+tim[2]+tim[1];
}
else
sum+=tim[i]+tim[i-1]+tim[1]+tim[1];
}
if(i==3)
sum+=tim[1]+tim[2]+tim[3];
if(i==2)
sum+=tim[2];
if(i==1)
sum+=tim[1];//相當於sum=tim[1],因爲只有當1個人過河時纔會出現這種情況
cout<<sum<<endl;
}
return 0;
}
附一篇過橋過河問題解析: