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

来源:互联网 发布:face软件 编辑:程序博客网 时间:2024/06/07 06:31

问题:

设有N个顾客同时等待一项服务,顾客i需要的服务时间为ti(1<=i<=N)共有S处可以提供此项服务,

应如何安排N个顾客需要的服务次序才能使平均等待时间达到最小?平均等待时间等于N个顾客等待服务的总时间除以N。

输入:

第一行两个正整数N和S表示N个顾客S处服务,接下来N个顾客需要的服务时间

输出:

平均等待时间,保留3位小数。

输入样例:

10 2

56 12 1 99 1000 23433 55 99 812

输出样例:

336.000

 

顾客的等待时间n个顾客,s个服务取n个顾客做药服务的时间,求平均等待是时间达到最小(服务时间从小到大排序)


#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <string>using namespace std;int a[1000];int ser[100];//服务窗口的顾客等待时间int sum[100];//服务窗口顾客等待时间的总和。int main(){    int n,s;    while(~scanf("%d%d",&n,&s))    {        for(int i=0;i<n;i++)        {         scanf("%d",&a[i]);        }        sort(a,a+n);        memset(ser,0,sizeof(ser));        memset(sum,0,sizeof(sum));        int i=0;        int j=0;        while(i<n)        {            ser[j]+=a[i];            sum[j]+=ser[j];            i++,j++;            if(j==s)                j=0;        }        double t=0;        for(int i=0;i<n;i++)        {            t+=sum[i];        }        t/=n;        printf("%0.3lf\n",t);    }    return 0;}

0 0