多处最优服务次序问题

mac2024-11-11  15

设有n个顾客同时等待一项服务,顾客i需要的服务时间为ti,1≤i≤n,共有s处可以提供此项服务。 应如何安排n个顾客的服务次序才能使平均等待时间达到最小? 平均等待时间是n个顾客等待服务时间的总和除以n。 给定的n个顾客需要的服务时间和s的值,编程计算最优服务次序。 输入 第一行有2个正整数n和s,表示有n个顾客且有s处可以提供顾客需要的服务。接下来的1行中,有n个正整数,表示n个顾客需要的服务时间。 输出 最小平均等待时间,输出保留3位小数。

#include<iostream> #include<vector> #include<algorithm> using namespace std; vector<int> a; //顾客等待的队列为client,提供服务的窗口s个 double greedy(vector<int> client, int s) { vector<int> service(s, 0); //服务窗口的单个顾客等待时间 vector<int> sum(s, 0); //服务窗口顾客等待时间的总和 int n = client.size(); //顾客的数量 sort(client.begin(), client.end()); int i = 0; //顾客的指针 int j = 0; //窗口的指针 while (i < n) { service[j] += client[i]; //进行转换 sum[j] += service[j]; //每个窗口的“服务时间”总和 i++; j++; if (j == s) //窗口排完一边,再从第一个窗口进行排序 j = 0; } double t = 0; //计算所有窗口服务时间的总和 for (int i = 0; i < s; i++) t += sum[i]; t = t / n; return t; } int main() { //vector<int> a; a = { 56,12,1,99,1000,234,33,55,99,812 }; int service; cin >> service; int m = greedy(a, service); cout << m; }
最新回复(0)