您的位置:首页 > 其它

多处最优服务次序问题(贪心策略)

2017-04-17 14:53 148 查看
不管有几处可以提供服务的窗口,只要将服务时间进行排序即可。

#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: