n个顾客等待时间最短 设有n个顾客同时等待一个服务。顾客i需要的服务时间为ti(1<=i<=n)。共有s处可以提供此服务。应如何安排n个顾客的服务才能使平均等待时间达到最短?平均的带时间时n个顾客等待服务时间的总和除以n。使用c语言贪心算法
时间: 2024-06-13 16:04:05 浏览: 212
为了使n个顾客的等待时间最短,可以采用贪心算法,即最短作业优先。将n个顾客需要的服务时间按照从小到大的顺序排序,然后依次将服务分配给空闲的服务点,每个服务点上的顾客等待时间为当前顾客的服务时间加上前面所有顾客的服务时间之和。最后计算出所有顾客的等待时间总和,除以n即可得到平均等待时间最短的方案。
以下是使用C++实现的代码:
```
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, s;
cout << "请输入顾客人数:" << endl;
cin >> n;
cout << "请输入服务点个数:" << endl;
cin >> s;
vector<int> a(n, 0); // 存储服务时间的数组
vector<int> line(s, 0); // 服务点
cout << "请输入顾客的服务时间:" << endl;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a.begin(), a.end()); // 对服务时间进行排序
vector<int> sum(1, 0); // 存储总的等待时间
for (int i = 0; i < n; i++) {
line[i % s] += a[i]; // 每个服务点上顾客的等待时间
sum[0] += line[i % s]; // 更新总的等待时间
}
int result = sum[0] / n; // 计算平均等待时间
cout << "平均最短等待时间为:" << result << endl;
return 0;
}
```
阅读全文