題意:有一個電梯,每一個人都想乘電梯到達自己想要到達的樓層!
從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 }
?