@Metralix
2016-12-07T02:46:13.000000Z
字数 579
阅读 978
c语言 贪心
题目大意:
有n个人做容量为k的电梯,电梯把乘客送达楼层以后,回一楼接剩下的乘客,设电梯经过每层楼时间固定,求把全部乘客送达再回到一楼的最小时间。
解题思路:
因为电梯每次运输的时间,是电梯内要去最高的楼的人决定的,所以,运最高的人是,捎上次高的k-1个人是最适合的解决方案。有这个思路就好办了,对这个n个人进行排序,每次运前k个上去,很容易就得出结果。
注意点:楼层有负的,所以注意取绝对值。
时间复杂度O(nlogn)。
AC代码:
#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){int n,k,sum=0;int i,j;int f[2005];scanf("%d %d",&n,&k);for(i=0;i<n;i++){scanf("%d",&f[i]);}for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if(f[j]>f[i]){int temp;temp=f[i];f[i]=f[j];f[j]=temp;}}}for(i=0;i<n;i+=k){sum+=2*fabs(f[i]-1);}printf("%d",sum);//printf("Hello world!\n");return 0;}
