@Metralix
2016-12-07T10:46:13.000000Z
字数 579
阅读 817
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;
}