餐馆(餐馆有n张桌子,每张桌子有一个参数a 可容纳的最大人数; 有m批客人,每批客人有两个参数:b人数,c预计消费金额。 不允许拼桌的情况下,选择其中一部分客人,使得总预计消费金额最大)

2023-11-02

餐馆

某餐馆有n张桌子,每张桌子有一个参数:a 可容纳的最大人数; 有m批客人,每批客人有两个参数:b人数,c预计消费金额。 在不允许拼桌的情况下,请实现一个算法选择其中一部分客人,使得总预计消费金额最大

输入描述:

输入包括m+2行。 第一行两个整数n(1 <= n <= 50000),m(1 <= m <= 50000) 第二行为n个参数a,即每个桌子可容纳的最大人数,以空格分隔,范围均在32位int范围内。 接下来m行,每行两个参数b,c。分别表示第i批客人的人数和预计消费金额,以空格分隔,范围均在32位int范围内。

输出描述:

输出一个整数,表示最大的总预计消费金额

示例:

示例1

输入

3 5 2 4 2 1 3 3 5 3 7 5 9 1 10

输出

20

分析:

将桌子大小由小到大排列,创建顾客类,将人数不大于最大桌子的顾客放入优先级队列中,顾客消费金额大的排在前面,flag数组记录桌子是否已经有人坐了,sum统计最后的总消费金额,count记录桌子被使用的个数,遍历队列,依次取出顾客,并遍历桌子数组,若此桌子可以坐下这批顾客并且桌子没有人坐,就坐下来,遍历队列过程中发现桌子已经用完了(count==n),直接跳出循环。

代码:

import java.util.*;

class Customer implements Comparable<Customer> {
    public int num;
    public int fee;

    public Customer(int num, int fee) {
        this.num = num;
        this.fee = fee;
    }

    @Override
    public int compareTo(Customer o) {
        if(o.fee>this.fee){
            return 1;
        }else if(o.fee <this.fee){
            return -1;
        }
        return 0;
    }
}
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()){
            int n = sc.nextInt();
            int m = sc.nextInt();
            int[] a = new int[n];//桌子
            for(int i=0; i<a.length; i++){
                a[i] = sc.nextInt();
            }
            Arrays.sort(a);//桌子由小到大排序
            PriorityQueue<Customer> queue = new PriorityQueue<>();
            for(int i=0; i<m; i++){
                int b =  sc.nextInt();
                int c = sc.nextInt();
                if(b <= a[n-1]){
                    queue.add(new Customer(b,c));
                }
            }
            long sum = 0;//金额
            int count = 0;//桌子被使用的个数
            boolean[] flag = new boolean[n];//记录桌子是否已经有人坐了
            while (!queue.isEmpty()){
                Customer customer = queue.poll();
                for(int j=0; j<n; j++){
                    if(a[j]>=customer.num && !flag[j]){
                        sum += customer.fee;
                        count++;
                        flag[j] = true;
                        break;
                    }
                }
                if(count == n){
                    break;
                }
            }
            System.out.println(sum);
        }
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

餐馆(餐馆有n张桌子,每张桌子有一个参数a 可容纳的最大人数; 有m批客人,每批客人有两个参数:b人数,c预计消费金额。 不允许拼桌的情况下,选择其中一部分客人,使得总预计消费金额最大) 的相关文章

随机推荐

  • 基于 SpringBoot+Vue+Java 的财务管理系统(附源码,数据库,教程)

    大家好 我是程序员徐师兄 六年大厂经验 今天为大家带来的是基于 SpringBoot Vue Java 的财务管理系统 附源码 教程 文章目录 一 简介 第二 主要技术 第三 部分效果图 第四章 系统设计 4 1功能结构 4 2 数据库设计
  • 电脑蓝屏日志存在哪里_记录蓝屏代码的文件在哪呀

    系统突然就蓝屏 对于普通用户来说 根本无法知道这是怎么回事 其实 windows系统每次出错 都会有相应的日志被记录下来 蓝屏也一样 只要找到日志 加以分析 找到蓝屏的原因 就好办了 1 查找日志 Windows XP和Vista的步骤差不
  • python自动发送邮件实现

    目录 1 前言 2 准备工作 2 1 电子邮件的基础知识 2 2 python邮件库 2 3 邮箱设置 3 python实现邮件自动发送 3 1 SMTP 和send 方法介绍 3 2 python实现实例 参考信息 1 前言 python
  • 【Python-Unity】基于Levenberg-Marquardt的UR3机械臂位置逆解

    摘要 Python程序实现了基于LM法计算UR3机械臂的位置逆解 并通过插补得到机器人轨迹 发送到Unity客户端 控制机械臂运动 Unity场景 操作演示 代码逻辑 源代码 一 Unity场景脚本 1 1 客户端Client cs Zer
  • mysql数据类型默认长度_mysql数据类型长度

    1个字节 8位 tinyint 为一个字节 2的8次方 256 所以最多存储到256 日期和时间数据类型 MySQL数据类型 含义 date 3字节 日期 格式 2014 09 18 time 3字节 时间 格式 08 42 30 date
  • spring boot Actuator原理详解之启动

    本文基于spring boot 2 2 0 release版本 从本文开始 我将连续几篇文章介绍Actuator的原理 本文是原理的第一篇文章 介绍Actuator是如何启动的 我们知道访问Actuator可以通过JMX web等渠道 本文
  • Jenkins拉取github库代码执行构建

    前言 上篇文章写了关于定时构建 以及构建后发送邮件的内容 但是构建时运行的代码是我们手动添加到Jenkins工作空间的 这篇文章我们说一说自动从GitHub远程库拉取代码 执行构建 废话不多说 开始 开始之前 我们需要安装GitHub插件
  • FDTD script command(结构)

    addcircle 添加圆柱体 addrect 添加长方体 addsphere 添加球体 addtriangle 添加三角柱 addmesh 添加网格 addfdtd 添加仿真区域 通用设置 设置结构名字 set name name 设置位
  • 启莱OA messageurl.aspx SQL注入

    子曰 不患人之不己知 患不知人也 漏洞复现 访问漏洞url 使用SQLmap对参数 user 进行注入 漏洞证明 文笔生疏 措辞浅薄 望各位大佬不吝赐教 万分感谢 免责声明 由于传播或利用此文所提供的信息 技术或方法而造成的任何直接或间接的
  • mysql中dml全称是什么_dml是什么?

    展开全部 DML是Data Manipulation Language的缩写 意思是数据62616964757a686964616fe4b893e5b19e31333431363566操纵语言 是指在SQL语言中 负责对数据库对象运行数据访
  • 初识消息队列(Messges Queue)

    最近在学习消息队列 因此查阅了很多资料 所以将知识做了一个总和 方便读者读完对消息队列有一个大致的了解 1 什么是消息队列 消息队列一般简称为 MQ Messges Queue 是指利用高效可靠的消息传递机制进行与平台无关的数据交流 并基于
  • LeetCode——034

    34 Search for a Range My Submissions QuestionEditorial Solution Total Accepted 80156 Total Submissions 275867 Difficulty
  • GAMES101回顾 -- 光线追踪

    Ray Tracing 光线追踪 实现步骤 发射光线 Ray Generation 光线追踪算法从观察者的视点 如相机位置 发射一条主光线 这条光线的起点是相机位置 方向是从相机位置经过像素位置的射线 光线求交 Ray Object Int
  • 【负荷预测】长短期负荷预测(Matlab代码实现)

    欢迎来到本博客 作者研究 主要研究方向是电力系统和智能算法 机器学习和深度学习 目前熟悉python网页爬虫 机器学习 群智能算法 深度学习的相关内容 希望将计算机和电网有效结合 目前更新 电力系统相关知识 期刊论文 算法 机器学习和人工智
  • 如何找短视频素材?这些工具可以帮到你

    由于自媒体成本低 门槛低 越来越多的人纷纷转行加入自媒体大军 利用大数据的便利 大量产出短视频吸粉变现 那么 如何高速产出短视频作品呢 下面这几个工具超级实用 01 易撰 说起易撰 很多人都只知道易撰的自媒体库 是非常强大的爆文收集器 但其
  • 如何用pip升级python版本,python的pip升级没反应

    大家好 小编为大家解答python的pip如何更新到最新版本的问题 很多人还不知道如何用pip升级python版本 现在让我们一起来看看吧 1 pip如何升级 第一步 首先检测一下我们电脑是否安装了python 打开命令提示框 输入pyth
  • ir指令、立即数的作用_我们一起学RISC-V——05-RV32I指令集

    本期内容如下 RISC V指令格式 RV32I指令命名规则 RV32I指令集 重点指令详解 一 RISC V指令格式 RISC V按照32bit的指令不同字符的具体分布共分为6种基本格式 分别是R类型 I类型 S类型 U类型 J类型 B类型
  • jdbc获取一行字符串_JDBC基础

    什么是JDBC JDBC就是Java程序访问数据库的规范 是一个规范定义接口 各种数据库厂家实现了JDBC这个接口 这些实现类就是数据库驱动 使用时只需要调用接口中的方法即可 不用关注类是如何实现的 JDBC的核心API有以下几种 Driv
  • 前端学习——css盒子模型、css3新特性、伪类、布局0711TODO

    样式还是得具体使用才能理解 不然会忘记也理解不透彻 还有定位 元素溢出 浮动 布局水平 垂直对齐 css3新特性 1过渡 2 动画 3 2D 3D转换 伪类 三种定位方式 弹性布局 栅格布局
  • 餐馆(餐馆有n张桌子,每张桌子有一个参数a 可容纳的最大人数; 有m批客人,每批客人有两个参数:b人数,c预计消费金额。 不允许拼桌的情况下,选择其中一部分客人,使得总预计消费金额最大)

    餐馆 某餐馆有n张桌子 每张桌子有一个参数 a 可容纳的最大人数 有m批客人 每批客人有两个参数 b人数 c预计消费金额 在不允许拼桌的情况下 请实现一个算法选择其中一部分客人 使得总预计消费金额最大 输入描述 输入包括m 2行 第一行两个