题意:电梯最多坐k人,给出n个人和他们要去的楼层,问最少的时间。
贪心的话不难想到坐一次就尽量带上尽可能多的人,而去high楼层的人带上尽可能多的比他low无疑更佳,因此从最高的开始找,依次是1, 1+k, 1+2k.....
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int cmp(int a, int b) { return a > b; } int a[2005]; int main() { int n, k; while(~scanf("%d%d", &n, &k)) { for(int i = 1; i <= n; i++) { scanf("%d", &a[i]); } int ans = 0; sort(a+1, a+1+n, cmp); int x = 1; while(x <= n) { ans += (a[x]-1) * 2; x += k; } printf("%d\n", ans); } return 0; }