题意:一群人坐船过河,船只有一辆,且一次最多坐两人,时间按慢的算。求最短过河时间?
总共有两种做法可使用:
1.先让最快和次快的过去,让最快的把船开回,再让最慢和次慢的过去,让次快的把船开回。需两个来回可将最慢和次慢过河。
2.让最快带着最慢过河,最快将船开回,再让最快带着次慢过河,最快将船开回。也是两回合将最慢和次慢过河。
每两个来回可判断哪种方法最快,将最快的相加。
#include<iostream> #include<algorithm> using namespace std; int main() { int m,n,t[1001],i,sum; cin>>m; while(m--) { cin>>n; sum=0; for(i=0;i<n;i++) cin>>t[i]; sort(t,t+n); for(i=n-1;i>2;i-=2) if(t[0]+2*t[1]+t[i]>2*t[0]+t[i-1]+t[i]) sum+=2*t[0]+t[i-1]+t[i]; else sum+=t[0]+2*t[1]+t[i]; if(i==2) sum+=t[0]+t[1]+t[2]; else if(i==1) sum+=t[1]; else sum+=t[0]; cout<<sum<<endl; } return 0; }
时间: 2024-10-28 16:39:04