题意:题意:一条船能够一次最多渡n辆车过河,过河用t min,回来又要用t min。m辆车按照一定的计划到达岸边。现在要求最少
用多少时间就所有的船渡过河,以及用了最少多少次将所有。
题解:用贪心思想,最早运到对岸的时间,取决于最后来的一辆车的被运送时间,因此最优解就是最后一辆车能够最早被运送。
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 int cas,n,t,m,ll,train_timess,times; 8 int map[1450]; 9 int main(){ 10 scanf("%d",&cas); 11 while(cas--){ 12 scanf("%d%d%d",&n,&t,&m); 13 for(int i=1;i<=m;i++) 14 scanf("%d",&map[i]); 15 ll=m%n;train_timess=0;times=0; 16 if(ll==0){ 17 train_timess=m/n; 18 for(int i=n;i<m;i+=n){ 19 times=max(map[n],times)+2*t; 20 } 21 times=max(map[m],times)+t; 22 } 23 else{train_timess=m/n+1; 24 times=map[ll]+2*t; 25 for(int i=ll+n;i<m;i+=n){ 26 times=max(times,map[i])+2*t; 27 } 28 times=max(map[m],times)+t; 29 } 30 printf("%d %d ",times,train_timess); 31 32 } 33 }