问题描述:设有n个顾客同时等待一项服务,顾客i需要的服务时间为ti,(1<=i<=n)。共有s处可以提供此项服务。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?
输入:第一行为两个正整数n和s
第二行为n个正整数,表示n个顾客需要的服务时间
输出:最小平均等待时间
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
#define N 10000
int main()
{
int i,j;
int min;
int index;//当前等待时间最小的工位
int n;
int s;//服务点数量
double sum;
int a[N];//每个顾客的服务时间
int wait[N];//每个站点的等待服务时间
while(cin>>n>>s)
{
for(i=0; i<n; i++)
cin>>a[i];
sort(a,a+n);
memset(wait,0,sizeof(wait));
for(i=0; i<n; i++)
{
min=wait[0];
index=0;
sum=0;
for(j=0; j<s; j++) //选择当前等待时间最小的工位
{
if(min>wait[j])
{
min=wait[j];
index=j;
}
}
wait[index]+=a[i];
a[i]=wait[index];
}
for(i=0;i<n;i++){
sum=sum+a[i];
}
sum/=n;
printf("%d\n",(int)(sum));
}
return 0;
}