poj1700--贪心算法

时间:2023-03-08 23:53:22
poj1700--贪心算法

题意:一群人坐船过河,船只有一辆,且一次最多坐两人,时间按慢的算。求最短过河时间?

  总共有两种做法可使用:

  1.先让最快和次快的过去,让最快的把船开回,再让最慢和次慢的过去,让次快的把船开回。需两个来回可将最慢和次慢过河。

  2.让最快带着最慢过河,最快将船开回,再让最快带着次慢过河,最快将船开回。也是两回合将最慢和次慢过河。

每两个来回可判断哪种方法最快,将最快的相加。


#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n,m;
cin>>n;
while(n--){
int a[],sum=,res1,res2,i=;
cin>>m;
for(i=;i<m;i++)
cin>>a[i];
sort(a,a+m);
for(i=m-;i>;i-=){
res1=a[]*+a[]+a[i];
res2=a[]*+a[i]+a[i-];
if(res1>res2)
sum+=res2;
else
sum+=res1;
}
if(i==)
sum+=a[]+a[]+a[];
else
sum+=a[i];
cout<<sum<<endl;
}
}