简单题意
有m辆车,每次最多运n辆过河,过河需要t时间,回来需要t时间,给出m辆车抵达岸边的时间,问使得所有车辆过河所需要的最少次数与最早时间
解题思路形成过程
最少次数当然是每次都满载运的次数当然最少,时间最早就需要考虑了,如果先满载,运完之后最后一次晕剩下的会浪费很多时间,因为剩下的车少,因此运送倒数第二批时,最后一批车辆早就到了,但还要等,但是如果先运送剩下的车辆数,再满载,这样运送时候就可以有时间让被运送的下一批车辆到达。
感想
应该多多联系实际,统筹和规划很重要
AC代码
#include <iostream>
#include <fstream>
using namespace std;
int main(){
ifstream cin("in.txt");
int c;
cin>>c;
while(c--){
int n,t,m;
cin>>n>>t>>m;
int car[m+1];
for(int i=1;i<m+1;i++){
cin>>car[i];
}
int time1,time2=0,temp;
temp=m%n;
if(temp){
time1=m/n+1;
}else{
time1=m/n;
}
if(temp) time2=car[temp]+t*2;
for(int i=1;i<=m/n;i++){
if(time2>=car[i*n+temp]){
time2+=t*2;//如果回来的时候下一批车辆最后一辆车已经到达已经到达
}else{
time2=car[i*n+temp]+t*2;//否则需要等到最后一辆车到达的时间
}
if(i==m/n)time2-=t;//最后一次只要把最后一辆车运到对岸计算就结束,所以要减去回来的时间
}
cout<<time2<<" "<<time1<<endl;
}
return 0;
}