题目描述

[题目描述]

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

[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;
}

转载于:https://www.cnblogs.com/jingmoxukong/p/4362211.html

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

  1. c语言贪心算法合并箭,LeetCode刷题题库:贪心算法

    LeetCode刷题笔记:贪心算法 自大学开始,我便陆陆续续的学习一些 算法和数据结构 方面的内容,同时也开始在一些平台刷题,也会参加一些大大小小的算法竞赛.但是平时刷题缺少目的性.系统性,最终导致算 ...

  2. 活动安排问题(贪心算法)

    问题描述: 有n个活动的活动集合E ,其中每一个活动都要求使用同一个资源,而在同一个时刻内资源只能被一个活动使用,每一个活动都有开始是时间和结束时间,要求从活动集合E中选出m个活动,使着m个活动都能顺 ...

  3. _32LeetCode代码随想录算法训练营第三十二天-贪心算法 | 738.单调递增的数字 、714.买卖股票的最佳时机含手续费、968.监控二叉树

    _32LeetCode代码随想录算法训练营第三十二天-贪心算法 | 738.单调递增的数字 .714.买卖股票的最佳时机含手续费.968.监控二叉树 题目列表 738.单调递增的数字 714.买卖股票 ...

  4. java贪心算法 区间调度_贪心算法-区间调度问题解之证明(示例代码)

    一.贪心算法 定义:一个算法是贪心算法,如果它是通过一些小的步骤来一个求解,并且在每一步根据局部情况选择一个决定,使得某些主要的指标得到优化. 二.区间调度问题 1. 问题:我们有一组需求{1,2,3 ...

  5. (十四)算法设计思想之“贪心算法”

    算法设计思想之"贪心算法" 贪心算法是什么 LeetCode:455.分饼干 LeetCode:122.买卖股票的最佳时机II 思考题 贪心算法是什么 贪心算法是算法设计中的一种方 ...

  6. 疯子的算法总结(四)贪心算法

    一.贪心算法 解决最优化问题的算法一般包含一系列的步骤,每一步都有若干的选择.对于很多最优化问题,只需要采用简单的贪心算法就可以解决,而不需要采用动态规划方法.贪心算法使所做的局部选择看起来都是当前最 ...

  7. _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II 、55.跳跃游戏、45.跳跃游戏II

    _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II .55.跳跃游戏.45.跳跃游戏II 题目列表 122.买卖股票的最佳时机II 55.跳跃游戏 45 ...

  8. 算法——人的天性贪心算法

    相应的练习代码:https://github.com/liuxuan320/Algorithm_Exercises 0. 写在前面 说起贪心算法,可能是我们最为熟悉的算法了.正如我标题所说的,贪心算法 ...

  9. 算法系列(二):贪心算法--Huffman编码

    算法系列(二):贪心算法--Huffman编码 一.分析 问题描述: 哈夫曼编码是广泛地用于数据文件压缩的十分有效的编码方法.其压缩率通常在20%-90%之间.哈夫曼编码算法使用字符在文件中出现的频率 ...

  10. 最早结束时间安排活动--贪心算法证明

    活动安排的最优解,一般是贪心算法的思路求取.每一次选择 相对于当前时间 最早结束的活动,得到的子序列是活动的一个最优安排,即在一段时间内安排的活动数最多. 设定命题 贪心算法执行到第k步,选择了k项活 ...

最新文章

  1. 猜数字游戏_FLEX版
  2. Delphi组件开发-在窗体标题栏添加按钮
  3. c语言编译成功,[C/CPP系列知识] 那些程序C语言可以编译通过但C++无法编译成功 Write a C program that won’t compile in C++...
  4. ssh整合学习(1)
  5. 深入理解 JVM Class文件格式(十)
  6. lambda表达式优化反射_反射选择器表达式
  7. 如何解决光端机的开关量问题?
  8. 【C++深度剖析教程1】C++中的经典问题解析-c++中的对象的构造顺序与析构顺序
  9. python mount回调函数_python类(4)——自己造第一个轮子
  10. VISIO 连接线转角居然默认不是直角,每次要改格式
  11. ps隐藏路径快捷键和PS隐藏路径的三种方法
  12. 数据结构第一章概论习题及答案
  13. Java中重载和重写的区别
  14. 异地IT驻场外包人员如何管理?
  15. 2015年高考物理复习重点
  16. typescript egg mysql_Egg.js egg-mysql 连接MySQL 报 AppWorkerDiedError 错误
  17. iOS小技能: OCR 之身份证识别 (正反面) 【 应用场景:物流类型app进行实名认证】
  18. 使用zinnia制作android手写输入功能(下)-------------------在项目中使用zinnia
  19. 心理学:《人性的弱点》【美】卡耐基
  20. c语言贪心算法排课,*排课软件常用算法介绍*兴文排课*学校经常用的免费自动排课软件...

热门文章

  1. php ip 短时间 重复,记录服务器端ip,记录这个ip第一次启动文件的时间,并且排除重复的ip...
  2. python3.x编程模板总结
  3. 浅谈算法和数据结构: 二 基本排序算法
  4. 在linux服务器上安装sublime编辑器
  5. Idea和Eclipse快捷键对比
  6. 696.计数二进制子串(力扣leetcode) 博主可答疑该问题
  7. NextPermutation,寻找下一个全排列
  8. 【转】NSBundle的使用,注意mainBundle和Custom Bundle的区别
  9. CDC相关知识点总结
  10. HDOJ 2084 数塔 简单解题报告