题目描述:
干饭人干饭魂干饭人吃饭得用盆。干饭人有精神吃饱了都进不去门。
每天中午下课,食堂里就会挤满各种各样的干饭人。已知学院食堂里有t个打饭窗口,有n个人排队到去打饭,他们打饭时间t1、t2…………tn为整数且各不相等,应如何安排他们的顺序才能使他们总共花费的时间最少?
输入:
第一行为两个整数,n和t ,用空格隔开,(n< =500t< =75)
第二行为n个人打饭所用的时间Ti (Ti< =100);
输出:
最少的花费时间
样例输入:
3 2
1 2 3
样例输出:
7
样例示意图:
题目思路:
不要把这题想得太复杂,就是日常生活中如何安排排队,使得花费的总时间最少。由题意易知,把时间花费少的人排在前面,后面的人等待时间就少,因此只要先将n个人的打饭时间升序排序,然后一排一排排列即可。
参考代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX1 501
#define MAX2 76
int n,t;
int a[MAX1];
int b[MAX2];
int cmp(const void *a,const void *b)
{
int* pa=(int*)a;
int* pb=(int*)b;
int num1=*pa;
int num2=*pb;
return num1-num2;
}
int main()
{
int i,sum=0;
scanf("%d%d",&n,&t);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
qsort(a,n,sizeof(a[0]),cmp);
for(i=0;i<n;i++)
{
b[i%t]+=a[i];
sum+=b[i%t];
}
printf("%d",sum);
return 0;
}