算法学习系列(贪心算法)—多处最优服务次序问题

问题描述:
设有n(1≤n≤100)个顾客同时等待一项服务。顾客i需要的服务时间为ti,1≤i≤n,共有s处提供此服务。应如何安排n个顾客的服务次序才能使平均等待时间达到最小。平均等待时间是n个顾客的等待时间(含服务时间)总和除以n。编写一个贪心算法,计算n个顾客的最小平均等待时间及各处的顾客服务次序。
提示:
谈心策略:最短服务时间优先。

输入数据:
第一行,顾客数n及服务处数s,用空格分隔;
第二行开始的n行,每行描述一个顾客,每行两个数,分别是顾客号及他需要的服务时间,用空格分隔。
输出数据
第一行,平均等待时间;
第二行开始的s行,每行描述1处,第1个数为服务处编号,其后为按服务次序先后给出的顾客号,由空格分隔;

算法思想:
算法思想:
该算法使用贪心思想,贪心策略是客户按服务时间长短决定被服务次序,服务时间短的优先被服务,且前往下一个最快能结束服务的服务点
接受服务。
1、定义一个time数组记录每个服务点目前的时间,每服务一个客户time[服务点号]加上该客户的服务时间。
2、随后对每个服务点的目前时间进行比较,数值最小的服务点即为最快能接受服务的服务点,该服务点进行服务,
该客户的等待时间waited_time即为该服务点的目前时间time[服务点号],并记录好该客户接受服务的服务点号served_point
3、将每个用户的等待时间相加,再除以客户的总数,即得到平均服务时间

头文件代码:
定义了一个类、声明了用到的各个成员变量,公有的service函数是调用贪心算法的入口
MultiService.h:

#ifndef MULTISERVICE_H_INCLUDED
#define MULTISERVICE_H_INCLUDED

#include<iostream>
#include<fstream>
#include<malloc.h>

using namespace std;

class MultiService
{
    typedef struct Custom
    {
        int number;
        float service_time;     //该客户需要的服务时间
        float waited_time;      //该客户已经等待的时间
        int served_point;     //记录该客户被服务的服务处的编号
    }Custom ,*Customs;        //定义结构体数组,记录一个顾客的编号以及服务时间

    Customs customs;

    int custom_number;  //顾
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值