题意:有一个电梯,每一个人都想乘电梯到达自己想要到达的楼层!
从a层到b层的时间是|a-b|, 乘客上下电梯的时间忽略不计!问最少
需要多少的时间....
这是一道神题啊,自己的思路不知不觉的就按照注解的思路走了,想着
用优先队列模拟一下,可能还是没有模拟好吧,一直哇!但是同学的
优先队列模拟过了! 没想到是greedy算法简单的几行就解决了!
1 #include<iostream> 2 #include<cmath> 3 #include<cstdio> 4 #include<algorithm> 5 #include<cmath> 6 #include<cstring> 7 #define N 2005 8 using namespace std; 9 10 int f[N]; 11 12 int main(){ 13 int n, k; 14 cin>>n>>k; 15 for(int i=1; i<=n; ++i) 16 cin>>f[i]; 17 sort(f+1, f+n+1, greater<int>()); 18 19 int ans = 0; 20 21 for(int i=1; i<=n; ){//按照最高的楼层排列,将k个人装满电梯,途中让楼层低的人下去! 22 ans += (f[i] - 1)*2;//所有的来回时间就是到达楼层搞的时间的2倍 23 i += k; 24 } 25 cout<<ans<<endl; 26 return 0; 27 }
时间: 2024-10-07 09:52:44