解析:
經典過河問題
N個人,只有一條船,每個人都有一個划船速度,要求讓N個人過河,一次渡河包括兩個人先過去,一個人再回來。每次時間取兩個人之間用時最多的,一個人的時候的時間就是他自己所用的。求讓N個人過完河所用的最短時間。
思路:
先按照時間由短到長排序 分情況討論
第一種情況 最快的依次把最慢,次慢送過去 耗費 t[n]+t[1]+t[n-1]+t[1]
第二種情況 最快的和次快的先過去 那麼耗費 t[2] 然後最快的回來 耗費 t[1] 。然後最慢和次慢一起過去,耗費 t[n] 。最後再讓次快的回來耗費 t[2]
所以總耗費 2*t[2]+t[1]+t[n]
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+1000;
int n;
int a[N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+1+n);
int ans=0;
while(n)
{
if(n==1) {ans+=a[1];break;}
else if(n==2) {ans+=a[2];break;}
else if(n==3){ans+=a[1]+a[2]+a[3];break;}
else
{
ans+=min(2*a[1]+a[n]+a[n-1],a[2]+a[1]+a[n]+a[2]);
n-=2;
}
}
cout<<ans<<endl;
}