[关闭]
@Metralix 2016-12-07T02:46:13.000000Z 字数 579 阅读 733

B - Design Tutorial: Learn from Life

c语言 贪心


题目大意:

    有n个人做容量为k的电梯,电梯把乘客送达楼层以后,回一楼接剩下的乘客,设电梯经过每层楼时间固定,求把全部乘客送达再回到一楼的最小时间。

解题思路:

    因为电梯每次运输的时间,是电梯内要去最高的楼的人决定的,所以,运最高的人是,捎上次高的k-1个人是最适合的解决方案。有这个思路就好办了,对这个n个人进行排序,每次运前k个上去,很容易就得出结果。
    注意点:楼层有负的,所以注意取绝对值。
    时间复杂度O(nlogn)。

AC代码:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. int main()
  5. {
  6. int n,k,sum=0;
  7. int i,j;
  8. int f[2005];
  9. scanf("%d %d",&n,&k);
  10. for(i=0;i<n;i++)
  11. {
  12. scanf("%d",&f[i]);
  13. }
  14. for(i=0;i<n-1;i++)
  15. {
  16. for(j=i+1;j<n;j++)
  17. {
  18. if(f[j]>f[i])
  19. {
  20. int temp;
  21. temp=f[i];
  22. f[i]=f[j];
  23. f[j]=temp;
  24. }
  25. }
  26. }
  27. for(i=0;i<n;i+=k)
  28. {
  29. sum+=2*fabs(f[i]-1);
  30. }
  31. printf("%d",sum);
  32. //printf("Hello world!\n");
  33. return 0;
  34. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注