有若干个活动,第i个开始时间和结束时间是[Si,fi),只有一个教室,活动之间不能交叠,求最多安排多少个活动?

输入
第1行:1个数N,时间段的数量(2 <= N <= 10000)
第2 - N + 1行:每行2个数,时间段的起点和终点(-10^9 <= S,E <= 10^9)
输出
输出最多可以选择的时间段数量。
输入示例
3
1 5
2 3
3 6

输出示例
2

原网站 51nod 给出的题解非常详细,这里就不多啰嗦了。去这里看:

https://www.51nod.com/tutorial/course.html#!courseId=14

基本思路:

把所有的活动时间按结束时间排序,

建立一个时间轴,(像一维数轴一样即可),如图

以线段的形式画在时间轴上,然后遍历所有活动。每加入一个活动,只需满足上一个占用着会场的活动结束了。

为什么要以结束时间排序呢?因为我们要尽量多的安排活动,当然希望下一个进来的活动能够成功安排进去,

那么就要求上一个活动尽量早结束。

代码:

#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
struct node{int b,e;
}a[100100];
bool cmp(node a,node b)
{return a.e<b.e;}
int main()
{int N;while(~scanf("%d",&N)){for(int i=0;i<N;i++){scanf("%d%d",&a[i].b,&a[i].e);}sort(a,a+N,cmp);//从小到大排序(按结束时间) int count=1;//成功安排进去的活动数目 int last=0;//记录上一个活动的序号 for(int i=1;i<N;i++){if(a[i].b>=a[last].e)//只要上一个活动结束了,现在的活动就可以进入 {last=i;count++;}}printf("%d\n",count);}return 0;
}

贪心算法基础之活动时间安排(一)安排 51nod 贪心教程相关推荐

  1. 《趣学算法(第2版)》读书笔记 Part 4 :贪心算法基础(操作)

    14天阅读挑战赛 系列笔记链接 <趣学算法(第2版)>读书笔记 Part 1 :如何高效学习算法 <趣学算法(第2版)>读书笔记 Part 2 :算法入门 <趣学算法(第 ...

  2. 4.25分享(贪心算法基础)

    这里写目录标题 贪心选择的概念 解题的基本思路 对贪心算法的理解 贪心算法的基本流程: 例题 部分背包问题 纸币找零问题 贪心算法与动态规划的区别 坚果保龄球 贪心选择的概念 贪心算法总是做出在当前看 ...

  3. 贪心算法基础(一)——数列极差

    贪心算法的思想就是用局部的最优解,达到最后全局的最优解.贪心算法使用是有限制的,一个问题能不能使用贪心来做,往往我们要对其进行必要的证明.贪心算法策略具有无后向性,也就是当前阶段的状态确定之后,不受后 ...

  4. POJ 4151/北大百练 4151 电影节 题解(两种方法)贪心算法基础

    POJ4151 电影节 总时间限制: 1000ms 内存限制: 65536kB 描述: 大学生电影节在北大举办! 这天,在北大各地放了多部电影,给定每部电影的放映时间区间,区间重叠的电影不可能同时看( ...

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

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

  6. 152. Leetcode 剑指 Offer 14- II. 剪绳子 II (贪心算法-基础题目)

    class Solution:def cuttingRope(self, n: int) -> int:if n < 4:return n - 1res = 1while n > 4 ...

  7. 151. Leetcode 剑指 Offer 14- I. 剪绳子 (贪心算法-基础题目)

    class Solution:def cuttingRope(self, n: int) -> int:if n <= 3:return n-1a, b = n // 3, n % 3if ...

  8. 150. Leetcode 860. 柠檬水找零 (贪心算法-基础题目)

    有如下三种情况: •情况一:账单是5,直接收下. •情况二:账单是10,消耗一个5,增加一个10 •情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个 5 class Solution ...

  9. 149. Leetcode 1005. K 次取反后最大化的数组和 (贪心算法-基础题目)

    那么本题的解题步骤为: 第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小 第二步:从前向后遍历,遇到负数将其变为正数,同时K-- 第三步:如果K还大于0,那么反复转变数值最小的元素,将 ...

最新文章

  1. IIS托管管道模式的集成和经典
  2. layui学习资料汇总
  3. E数据结构实验之查找五:平方之哈希表
  4. 数组到指针的隐式转换
  5. javadoc - Java API 文档生成器(Windows版本)
  6. flavr—超级漂亮的jQuery扁平弹出对话框
  7. navigation笔记
  8. 仿百度的输入提示功能
  9. 猫头鹰的深夜翻译:JAVA中异常处理的最佳实践
  10. 局部敏感哈希(Locality Sensitive Hashing,LSH)
  11. 漫画追踪器Tracker
  12. git add 后git reset --hard xxx的代码丢失,代码如何找回
  13. 到底有多少种病毒?科学家们分析了100多种SARS-CoV-2变种的功能
  14. ZooKeeper客户端源码(二)——向服务端发起请求(顺序响应+同步阻塞+异步回调)
  15. Codeforces Round #734 (Div. 3)_B2. Wonderful Coloring - 2(贪心)
  16. DotSpatial
  17. 笔记本合上后再打开电源键常亮,无法唤醒,只能强制开机
  18. IntelliJ IDEA的下载安装与破解
  19. 交错和 (hihocoder)
  20. 网址中请求参数中%2c

热门文章

  1. Python进行Excel数据统计
  2. 数据库查询简单练习(五)
  3. Excel如何从单元格中提取数值
  4. 第十一届蓝桥杯大赛软件类决赛(2020javaB国赛)
  5. Matlab开发Web App服务器
  6. # USACO@2020铜级赛第二题
  7. 打印日志文件并将其上传存到HDFS中
  8. 盘点Hadoop生态圈:13个让大象飞起来的开源工具
  9. 理不懂,你注定就是穷打工的命 【转】
  10. 煤化工工控网络安全解决方案 第一部分