Ferry Loading||

uva10440:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1381

题意:题意:一条船能够一次最多渡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 }
View Code
原文地址:https://www.cnblogs.com/chujian123/p/3356609.html