算法分析与设计之多处最优服务次序问题2

¢ 设有n个顾客同时等待一项服务,顾客i需要的服务时间为ti,1≤i≤n,共有s处可以提供此项服务。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n个顾客等待服务时间的总和除以n。

¢ 给定的n个顾客需要的服务时间和s的值,编程计算最优服务次序。

¢ 输入

第一行有2个正整数n和s,表示有n个顾客且有s处可以提供顾客需要的服务。接下来的1行中,有n个正整数,表示n个顾客需要的服务时间。

¢ 输出

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

输入样例

10 2

56 12 1 99 1000 234 33 55 99 812

输出样例

336.00

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;

int main()
{
    int i,n,j,k,minx;
    int s;
    double t;
    int a[10005],b[1005];
    while(cin>>n>>s) // 输入顾客数量和可供等待的工位
    {
        for(i=0; i<n; i++)
            cin>>a[i]; //输入顾客使用时间数组
        sort(a,a+n); //将数组从小到大排序
        memset(b,0,sizeof(b)); // 将b中的数组初始化为0
        for(i=0; i<n; i++) //遍历顾客的等待时间
        {
            minx=0x7fffffff; //定义一个非常大的数
            k=0; //
            for(j=0; j<s; j++)  //有几个工位 进行几次循环
            {
                if(minx>b[j]) // 这个和上个小的进行对比
                {
                    minx=b[j]; //记录小的
                    k=j; //记录小的对应的工位
                }
            }
            b[k]+=a[i]; // b[k] = b[k] + a[i]  记录每个工位的总时间
            a[i]=b[k];  // 把每个工位的时间赋给对应顾客 形成 顾客总时间数组
        }
        t=0;
        for(i=0; i<n; i++) // 计算顾客平均等待时间
            t+=a[i];
        t/=n;
        printf("%d\n",(int)(t));
    }

    return 0;

}

原文地址:https://www.cnblogs.com/wx2020/p/9906655.html

时间: 2024-11-15 00:37:42

算法分析与设计之多处最优服务次序问题2的相关文章

贪心之最优服务次序

代码: 1 #include <cstdio> 2 #include <algorithm> 3 #include <iostream> 4 #include <queue> 5 #include <vector> 6 using namespace std; 7 8 const int maxn=100; 9 10 int x[maxn]; 11 12 int main() 13 { 14 int n; 15 cin>>n; 16

算法分析与设计——动态规划法实验报告

   算法导论  课程设计 成 绩 题    目:    动态规划法 学院班级:        1613013         学    号:      16130130216       姓    名:        库 妍           主讲教师:        张立勇          日    期:       2019.4.11         (1)描述最优子结构:如果最优的加括号的方式将其分解为Ai..k与Ak+1..j的乘积,则分别对Ai..k与Ak+1..j加括号的方式也

算法分析与设计——贪心法实验报告

   算法导论  课程设计 成 绩 题    目:    贪心法 学院班级:        1613013         学    号:      16130130216       姓    名:        库 妍           主讲教师:        张立勇          日    期:       2019.5.9         一.Knapsack Problem 1.实验题目 下面有5个具有值和权重列表的项目,背包最多可以包含100磅.解决了分数背包和0/1背包问题

算法分析与设计复习

算法分析与设计复习 2016年初,研一上学期期末考试前,复习并总结算法分析与设计科目的内容.复习过程参照<算法导论>中文第2版,同时参照PPT,章节划分根据PPT内容 概要: 第一章 概述 第二章 插入排序&分治策略 第三章 复杂度分析 第四章 堆与堆排序 第五章 快速排序 第六章 线性时间排序 第一章 概述 算法的应用范围 算法在诸如生物等诸多领域有其应用 算法的意义 算法在很多情况下让不可能完成的事情变成了可能,让处理的很慢的过程变快. 一个铺垫 一串不全为0的数,怎么取能拿到一段

Java算法分析与设计视频教程下载

下载地址:http://pan.baidu.com/s/1i4pMZ9z 密码:v9ra 算法分析与设计Java版,是一套实用型算法课程.通过本课程的学习,学员可以掌握以下技术点:线性结构与顺序表.单向链表.循环链表.栈的基本概念.链式堆栈.中缀表达式.队列.链式队列.串.MyString.Brute-Force算法.MySet类实现.矩阵类.递归算法.哈夫曼树.希尔排序.HashTable算法等内容. 第一讲.算法基本概述.抽象数据类型 第二讲.算法的设计目标.时间复杂度和空间复杂度 第三讲.

Java实战应用视频教程之Java算法分析与设计

实战应用Java算法分析与设计(链表.二叉树.哈夫曼树.图.动态规划.HashTable算法)适合人群:中级课时数量:38课时用到技术:Java算法涉及项目:案例应用实战咨询qq:1840215592课程简介:算法分析与设计Java版,是一套实用型算法课程.通过本课程的学习,学员可以掌握以下技术点:线性结构与顺序表.单向链表.循环链表.栈的基本概念.链式堆栈.中缀表达式.队列.链式队列.串.MyString.Brute-Force算法.MySet类实现.矩阵类.递归算法.哈夫曼树.希尔排序.Ha

算法分析与设计——分治法实验报告

   算法导论  课程设计 成 绩 题    目:  算法导论课程设计实验报告 学院班级:        1613013         学    号:      16130130216       姓    名:        库 妍           主讲教师:        张立勇          日    期:       2019.6.3         录 分治法 一.Implement exercise 2.3-7................................

算法设计与分析——凸多边形最优三角剖分

一.问题描述 多边形是平面上一条分段线性的闭曲线.也就是说,多边形是由一系列首尾相接的直线段组成的.组成多边形的各直线段称为该多边形的边.多边形相接两条边的连接点称为多边形的顶点.若多边形的边之间除了连接顶点外没有别的公共点,则称该多边形为简单多边形. 一个简单多边形将平面分为3个部分:被包围在多边形内的所有点构成了多边形的内部:多边形本身构成多边形的边界:而平面上其余的点构成了多边形的外部. 这里给出凸多边形的定义: 当一个简单多边形及其内部构成一个闭凸集时,称该简单多边形为凸多边形.也就是说

南邮算法分析与设计实验2 动态规划法

动态规划法 实验目的: 加深对动态规划法的算法原理及实现过程的理解,学习用动态规划法解决实际应用中的最长公共子序列问题. 实验内容: 用动态规划法实现求两序列的最长公共子序列,其比较结果可用于基因比较.文章比较等多个领域. 实验要求: 掌握动态规划法的思想,及动态规划法在实际中的应用:分析最长公共子序列的问题特征,选择算法策略并设计具体算法,编程实现两输入序列的比较,并输出它们的最长公共子序列. 实验原理及内容(包括操作过程.结果分析等) 1.最长公共子序列(LCS)问题是:给定两个字符序列X=