多处最优服务次序问题(贪心策略)
2017-04-17 14:53
148 查看
不管有几处可以提供服务的窗口,只要将服务时间进行排序即可。
输入:
10 2
56 12 1 99 1000 234 33 55 99 812
输出:
336.000
#include<iostream> #include<vector> #include<string> #include<set> #include<memory.h> #include<cstdio> #include<list> #include<string> #include<map> #include<cmath> #include <algorithm> #include <queue> #define NUM 1000 #define maxint 10000000 #define INF 0x3f3f3f3f using namespace std; int c[NUM][NUM];//用邻接矩阵存储边和权 int dist[NUM]; string a; int k; double greedy(vector<int> client, int s) { double t = 0; vector<int> service(s,0);//记录每个人等待的时间 vector<int> sum(s,0);//记录每个窗口等待的总时间 sort(client.begin(),client.end()); int i = 0; int j = 0; while(i<client.size()) { service[j%s] += client[i++]; sum[j%s] += service[j%s]; j++; } for(int i = 0;i<s;i++) { t+= sum[i]; } return t; } int main() { freopen("in.txt", "r", stdin); vector<int> v ; int num ; int s; while(cin>>num>>s) { int temp; for(int i = 0;i<num;i++) { cin>>temp; v.push_back(temp); } printf("%.3f\n",greedy(v,s)/num); } }
输入:
10 2
56 12 1 99 1000 234 33 55 99 812
输出:
336.000