Describe:
有n项工作,每项工作分别再si时间开始,在ti时间结束;对于每项工作,你都可以参与与否,如果选择参与,那么自始自终都必须全程参与;此外参加工作的时间段不能重复(即使是开始的瞬间和结束的瞬间的重叠也不允许);
你的目标是参与尽可能多的工作,那么最多能参与多少项工作呢?
1<=n<=100000
1<=si<=ti<=10^9
输入:
第一行:n
第二行:n个整数空格隔开,代表n个工作的开始时间
第三行:n个整数空格隔开,代表n个工作的结束时间

样例输入:
5
1 2 4 6 8
3 5 7 9 10
样例输出:
3

Thinking:

最终我们需要将一个个事件按结束时间排序,如何让它们排序并且保证每个事件的开始、结束时间是对应的呢?
这里是将 si 和 ti 作为一个类的成员变量,然后构建对象数组;

#include <iostream>
#include <algorithm>
using namespace std;class Thing //建立事件类,里面存放事件的起始时间s,终止时间e
{public:int s;int e;Thing(int ss = 0, int ee = 0) //构造函数{s = ss;e = ee;}
};bool compare(Thing a, Thing b)//自定义sort函数的第三个参数--排序函数,因为sort并不能按原有排序函数对类生成的对象进行排序
{return a.e < b.e; //意思就是 a.e比b.e小 ,a要在b前面
}int fun(int n, int si[], int ti[])
{int count = 1;//计数,此处代表第一个事件完成Thing th[n];for (int i = 0; i < n; i++) //对类的对象赋值{th[i].s = si[i];th[i].e = ti[i];}sort(th, &th[n-1], compare);//sort排序(要排序的数组的起始地址,最后一个要排序的地址,排序函数)int last = th[0].e;for (int i = 1; i < n; i++)//依次找跟在上一个事件后的事件(下一件事的开始时间大于上一件事的结束时间){if (th[i].s > last){count++;last = th[i].e;}}return count;
}
int main()
{int n = 5;int si[] = {1, 2, 4, 6, 8};int ti[] = {4, 3, 7, 9, 10};cout << fun(n, si, ti);//输出结果为3return 0;
}

排完序后是这样的(这里没有用样例,因为它本来就是有序的)

所以以后遇到区间调度问题,应想到按结束时间排序即可得解!
如有错误,感谢指正!

Algorithm:贪心策略之区间调度问题相关推荐

  1. Algorithm:贪心策略之区间覆盖问题

    Describe: 给定一个大区间1-T,以及n个小区间,要求用最少个数的小区间来覆盖大区间: Input: 第一行,输入n和T: 随后n行输入对应区间的起始终止坐标 Output: 输出覆盖区间1- ...

  2. Algorithm:贪心策略之区间选点问题

    Describe:在数轴上标点,使得该点能够被区间覆盖,并要求对应区间最少覆盖Ki个点,求最少标多少个点保证满足要求,同一个位置不能重复: Input: 第一行输入区间个数 n 后面n行输入对应区间的 ...

  3. 【贪心策略】区间选点问题

    问题描述: Description You are given n closed, integer intervals [ai, bi] and n integers c1,-, cn. Write ...

  4. 贪心算法:区间调度-射气球问题

    贪心算法:区间调度问题 母问题描述: 在一个会场中,安排活动,给定所有活动的开始时间与结束时间的集合放在数组nums[n][2]中.求问最多能安排几场活动,使每场活动之间的时间不冲突. public ...

  5. 一份贪心算法区间调度问题解法攻略,拿走不谢

    作者 | labuladong 来源 | labuladong(ID:labuladong) [导读]什么是贪心算法呢?贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多 ...

  6. 区间覆盖全部类型及部分精选习题汇总详解(贪心策略)

    内容如下: 1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2, ...

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

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

  8. 贪心算法区间调度问题思路代码证明

    1.活动安排问题 问题:有若干个活动,第i个开始时间和结束时间是[Si,fi),只有一个教室,活动之间不能交叠,求最多安排多少个活动? 解题思路:将活动按照结束时间进行从小到大排序,挑选出结束时间尽量 ...

  9. 三类基于贪心思想的区间覆盖问题

    一.区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖. 样例:一个长度为8的区间,可选的线段有[2,6], ...

最新文章

  1. C++ string字符串的比较是否相等
  2. 在对话框中应用CScrollView显示图像
  3. 华人斩获最佳Demo论文,Bengio获时间检验奖,最佳论文突破NLP传统测试方法 | ACL 2020...
  4. KVM虚拟机内无agent情况下的监控方法
  5. dockerfile构建nginx服务
  6. 【Android工具】更新安卓手机传感器信息获取工具Ampere Castro phyphox,轻松获取硬件数据和状态信息...
  7. 函数型F#语言很值得学习
  8. linux NAND驱动之三:6410平台上的NAND驱动加载
  9. dropdownlist返回值设置方法
  10. 20190911每日一句
  11. 收藏一篇关于 用两个栈实现一个队列功能的帖子
  12. mysql数据库安装时的默认端口_数据库默认端口号
  13. 计算机电脑配置ppt,计算机应用基础之word2010课件.ppt
  14. librosa的短时傅里叶实现librosa.stft()
  15. smallpt: Global Illumination in 99 lines of C++讲解
  16. Office Powerpoint演示文档大瘦身
  17. Java SWT的Composite控件刷新
  18. 高效学习的4种方法,提升你的职场竞争力
  19. ADO对Excel对象进行连接时的 两种方法区别
  20. 一元线性回归模型(保姆级)

热门文章

  1. java第十四次作业
  2. JavaScript(DOM编程一)
  3. LeetCode Online Judge 题目C# 练习 - Search in Rotated Sorted Array II
  4. CSDN签约慧安金科,共建全方位智能风控体系
  5. 新手如何入门PyTorch
  6. 7天学完Java基础之4/7
  7. linux 脚本使用第一篇
  8. 多行文本溢出显示省略号
  9. web项目开发最佳做法
  10. 跟我学android-Android应用基本组件介绍(五)