最优服务次序问题

最优服务次序问题

时间: 1ms        内存:64M

描述:

设有n 个顾客同时等待一项服务。顾客i需要的服务时间为t i,1≤i≤n。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n 个顾客等待服务时间的总和除以n。

对于给定的n 个顾客需要的服务时间,计算最优服务次序。

输入:

输入数据的第一行是正整数n(n≤1000),表示有n 个顾客。接下来的1行中,有n 个正整数,表示n 个顾客需要的服务时间。

输出:

输出一个实数,保留2位小数,表示计算出的最小平均等待时间。

示例输入:

10
56 12 1 99 1000 234 33 55 99 812

示例输出:

532.00

提示:

参考答案(内存最优[1308]):

#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;

int c[10000];


int comp(const void *a,const void *b)
{
	return *(int *)a - *(int *)b;
}

int main()
{
	int n,i,j;
    cin >> n;
	double resu = 0;
	for(i=0; i<n; i++)
	{
		cin >> c[i];
	}
    qsort(c,n,4,comp);
	

	for(i = 0; i< n;i++)
	{
		resu+= c[i]*(n-i); 
	}
	cout<< setiosflags(ios::fixed)<<setprecision(2) << double(resu)/double(n) << endl;

	return 0;
}

参考答案(时间最优[0]):

#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;

int c[10000];


int comp(const void *a,const void *b)
{
	return *(int *)a - *(int *)b;
}

int main()
{
	int n,i,j;
    cin >> n;
	double resu = 0;
	for(i=0; i<n; i++)
	{
		cin >> c[i];
	}
    qsort(c,n,4,comp);
	

	for(i = 0; i< n;i++)
	{
		resu+= c[i]*(n-i); 
	}
	cout<< setiosflags(ios::fixed)<<setprecision(2) << double(resu)/double(n) << endl;

	return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注