题目描述
设有n 个顾客同时等待一项服务。顾客i需要的服务时间为t i, 1<=i<=n 。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n 个顾客等待服务时间以及服务时间的总和除以n。
对于给定的n个顾客需要的服务时间,编程计算最优服务次序。
输入
第一行是正整数n,表示有n 个顾客。接下来的1行中,有n个正整数,表示n个顾客需要的服务时间。(1 <= n <= 1000)
输出
最小平均等待时间
样例
输入
10
56 12 1 99 1000 234 33 55 99 812
输出
532.00
C++代码如下:
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
struct service
{
int ser = 0;
int wait = 0;
}w[N];
bool sortbmp(const service &w1, const service &w2)
{
return w1.ser < w2.ser;
}
int main()
{
int n;
cin >> n;
int sum = 0;
for (int i = 1; i <= n; i++)
{
cin >> w[i].ser;
sum += w[i].ser;
}
sort(w+1,w+n+1,sortbmp);
int wait = 0;
for(int i = 1; i <= n; i++)
{
w[i].wait += w[i-1].ser + w[i-1].wait;
wait += w[i].wait;
}
double ans = (1.0)*(sum + wait)/n;
printf("%.2lf\n",ans);
return 0;
}