题意:有一个电梯,每一个人都想乘电梯到达自己想要到达的楼层!
从a层到b层的时间是|a-b|, 乘客上下电梯的时间忽略不计!问最少需要多少的时间.... 这是一道神题啊,自己的思路不知不觉的就按照注解的思路走了,想着用优先队列模拟一下,可能还是没有模拟好吧,一直哇!但是同学的优先队列模拟过了! 没想到是greedy算法简单的几行就解决了!1 #include2 #include 3 #include 4 #include 5 #include 6 #include 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 ());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< <