[算法题] 安排会议室——贪心算法的应用

简介: 题目描述 [题目描述] 在大公司里,会议是很多的,开会得有场子,要场子你得先在电子流里预订。如果你是项目组新来的小弟,那么恭喜你,每天抢订会议室的任务就光荣的分给你了。老大要求你尽可能多的订会议室,但是这些会议室之间不能有时间冲突。

题目描述

[题目描述]

在大公司里,会议是很多的,开会得有场子,要场子你得先在电子流里预订。
如果你是项目组新来的小弟,那么恭喜你,每天抢订会议室的任务就光荣的分给你了。
老大要求你尽可能多的订会议室,但是这些会议室之间不能有时间冲突。

[Input]
input文件中可以包括多个测试案例。
T(T ≤ 20),输入文件的第一行表示文件中有多少个测试案例。
N(1 ≤ N ≤ 500),每个测试案例的第一行表示会议室的数目。
每个测试案例中,除第一行以外表示各个会议室的信息。每行会有3个数字,分别表示会议编号、会议起始时间、会议结束时间。


[Output]
输出可以安排的最大会议数目

[I/O Example]
Input
2
6
1 1 10
2 5 6
3 13 15
4 14 17
5 8 14
6 3 12
15
1 4 8
2 2 5
3 2 6
4 4 6
5 2 3
6 1 6
7 4 7
8 3 5
9 3 8
10 1 2
11 1 7
12 2 4
13 5 6
14 4 5
15 7 8

Output
3
5

 

练习模板

#include <cstdio>
#include <iostream>

using  namespace std;

int main( int argc,  char** argv)
{
     int tc, T;
    cin >> T;
     for(tc =  0; tc < T; tc++)
    {
         // TO DO here
    }

     return  0; // Your program should return 0 on normal termination.
}

 

代码实现

题目中要求会议时间不可以冲突,所以可以利用贪心算法,尽可能的选择会议时间结束较早的会议室,这样就能安排最多的会议室。

#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>

using  namespace std;


class MeetingRoom {
public:
     int index;
     int start;
     int end;
public:
    MeetingRoom( int i,  int s,  int e) : index(i), start(s), end(e) {}
};

bool isEndEarly( const MeetingRoom r1,  const MeetingRoom r2) {
     return (r1.end < r2.end);
}

int main( int argc,  char** argv)
{
     int tc, T;
     int num =  0;
     int count =  0;
     int index =  0;
     int start =  0;
     int end =  0;
    vector<MeetingRoom> rooms;

    freopen( " input.txt ",  " r ", stdin);
    cin >> T;
     for(tc =  0; tc < T; tc++)
    {
        rooms.clear();  //  clear vector

        
//  get all the info of rooms
        cin >> num;
         for ( int i =  0; i < num; i++) {
            cin >> index >> start >> end;
            MeetingRoom room(index, start, end);
            rooms.push_back(room);
        }

         //  sort rooms for end time
        sort(rooms.begin(), rooms.end(), isEndEarly);

         //  use greedy algorithm to solve promblem
        count =  1;
        MeetingRoom prev = rooms[ 0];
         for (vector<MeetingRoom>::iterator it = rooms.begin() +  1; it != rooms.end(); it++) {
            MeetingRoom current = *it;
             if (current.start >= prev.end) {
                count++;
                prev = current;
            }
        }

        cout << count << endl;
    }

     return  0;
}

 

目录
相关文章
|
10月前
|
缓存 弹性计算 安全
阿里云8核云服务器价格:8核16G、8核32G、8核64G配置收费标准与活动价格参考
阿里云8核CPU的云服务器多少钱?8核云服务器热门配置主要有8核16G、8核32G、8核64G等,部分企业用户可能会选择16核32核等更高的配置。本文为大家介绍阿里云8核云服务器热门实例规格及最新收费标准与活动价格情况,涵盖8核16G、8核32G、8核64G三种主流配置,以供参考。
2377 1
|
9月前
|
人工智能 JSON 算法
超越Prompt与RAG:为什么企业级AI客服必须走微调之路?
你好,我是maoku。本文直击企业AI落地痛点:为何Prompt+RAG之后,仍需模型微调?以电商客服为例,深度解析微调的不可替代性——填补通用模型与垂直业务间的“专业鸿沟”,通过高质量数据构建、情绪共情训练与微调+RAG协同架构,打造专业、稳定、低成本的业务AI。(239字)
|
10月前
|
NoSQL Linux 调度
C 语言高效学习:从入门到嵌入式的科学路径
C语言是底层与嵌入式开发的基石。科学学习路径分四阶:入门打基础,深化攻指针内存,实战练项目,进阶接硬件。掌握GCC、GDB、Makefile,拓展至STM32、FreeRTOS与SQLite,实现从语法到工程、从初级到资深的跃迁,筑牢“软件-硬件”桥梁。
468 0
|
12月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
638 18
|
9月前
|
SQL 算法 数据可视化
聚焦攻略:运用节点式思维对齐工具,实现工作目标的“降维打击”
在数字化协作时代,企业核心挑战在于“思维同频”。节点式思维对齐工具通过网状拓扑结构,将碎片化认知转化为可观察、可修正的组织级思维引擎,实现跨部门共识穿透与动态协同校准,提升决策效率与执行一致性。
|
8月前
|
人工智能 机器人 API
2026年OpenClaw(Clawdbot)部署及使用指南:自定义Skill开发,解锁AI Agent生产力
2026年初,一款名为OpenClaw(曾用名Clawdbot、Moltbot)的AI开源项目横空出世,以“真正能做事的AI Agent”为定位,发布首日斩获9000+GitHub Stars,一周内星标数飙升至15万+,远超2025年爆火的DeepSeek首周表现。与传统聊天机器人不同,OpenClaw打破了“只输出信息不执行动作”的局限,能直接操控设备完成文件管理、数据处理、定时任务等复杂操作,成为开发者与效率爱好者的新宠。
2842 2
|
机器学习/深度学习 存储 API
飞桨x昇腾生态适配方案:06_算子适配举例
本节详细解析了Paddle-API与CANN-Kernel之间的差异及适配策略,涵盖三种主要场景:参数缺失或不对应、数据类型不匹配以及layout转换。针对不同问题提出具体解决方案,如通过默认赋值或计算补充参数、使用`Cast`操作转换数据类型、借助`Transpose`调整数据布局等。同时,以ReluGrad和nll_loss算子为例,深入说明参数对齐、数据类型转换及转置操作的实现流程,为开发者提供清晰的适配指导。
567 0
|
机器学习/深度学习 并行计算 PyTorch
使用PyTorch Profiler进行模型性能分析,改善并加速PyTorch训练
加速机器学习模型训练是工程师的关键需求。PyTorch Profiler提供了一种分析工具,用于测量CPU和CUDA时间,以及内存使用情况。通过在训练代码中嵌入分析器并使用tensorboard查看结果,工程师可以识别性能瓶颈。Profiler的`record_function`功能允许为特定操作命名,便于跟踪。优化策略包括使用FlashAttention或FSDP减少内存使用,以及通过torch.compile提升速度。监控CUDA内核执行和内存分配,尤其是避免频繁的cudaMalloc,能有效提升GPU效率。内存历史记录分析有助于检测内存泄漏和优化批处理大小。
2231 1
|
存储 机器学习/深度学习 算法
如何准确的估计llm推理和微调的内存消耗
最近发布的三个大型语言模型——Command-R+ (104B参数), Mixtral-8x22b (141B参数的MoE模型), 和 Llama 3 70b (70.6B参数)——需要巨大的内存资源。推理时,Command-R+需193.72GB GPU RAM,Mixtral-8x22B需262.63GB,Llama 370b需131.5GB。激活的内存消耗根据序列长度、批大小等因素变化。文章详细介绍了计算这些模型内存需求的方法,并探讨了如何通过量化、优化器优化和梯度检查点减少内存使用,以适应微调和推理。
3127 0
|
人工智能 自然语言处理 机器人
AI赋能代码生成,FuncGPT(慧函数)解放开发者生产力
AIGC的出现,在内容生成领域一次又一次地引领着变革。AI 在绘画、音乐、视频等领域的逐渐渗入,大大减轻了内容生产者的工作负担,内容的生产方式也发生了质的变化。那么AIGC能否帮助开发者更简单、高效地生成代码,从而提升研发效率呢?

热门文章

最新文章