贪心算法基础之活动时间安排(一)安排 51nod 贪心教程
有若干个活动,第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 贪心教程相关推荐
- 《趣学算法(第2版)》读书笔记 Part 4 :贪心算法基础(操作)
14天阅读挑战赛 系列笔记链接 <趣学算法(第2版)>读书笔记 Part 1 :如何高效学习算法 <趣学算法(第2版)>读书笔记 Part 2 :算法入门 <趣学算法(第 ...
- 4.25分享(贪心算法基础)
这里写目录标题 贪心选择的概念 解题的基本思路 对贪心算法的理解 贪心算法的基本流程: 例题 部分背包问题 纸币找零问题 贪心算法与动态规划的区别 坚果保龄球 贪心选择的概念 贪心算法总是做出在当前看 ...
- 贪心算法基础(一)——数列极差
贪心算法的思想就是用局部的最优解,达到最后全局的最优解.贪心算法使用是有限制的,一个问题能不能使用贪心来做,往往我们要对其进行必要的证明.贪心算法策略具有无后向性,也就是当前阶段的状态确定之后,不受后 ...
- POJ 4151/北大百练 4151 电影节 题解(两种方法)贪心算法基础
POJ4151 电影节 总时间限制: 1000ms 内存限制: 65536kB 描述: 大学生电影节在北大举办! 这天,在北大各地放了多部电影,给定每部电影的放映时间区间,区间重叠的电影不可能同时看( ...
- c语言贪心算法合并箭,LeetCode刷题题库:贪心算法
LeetCode刷题笔记:贪心算法 自大学开始,我便陆陆续续的学习一些 算法和数据结构 方面的内容,同时也开始在一些平台刷题,也会参加一些大大小小的算法竞赛.但是平时刷题缺少目的性.系统性,最终导致算 ...
- 152. Leetcode 剑指 Offer 14- II. 剪绳子 II (贪心算法-基础题目)
class Solution:def cuttingRope(self, n: int) -> int:if n < 4:return n - 1res = 1while n > 4 ...
- 151. Leetcode 剑指 Offer 14- I. 剪绳子 (贪心算法-基础题目)
class Solution:def cuttingRope(self, n: int) -> int:if n <= 3:return n-1a, b = n // 3, n % 3if ...
- 150. Leetcode 860. 柠檬水找零 (贪心算法-基础题目)
有如下三种情况: •情况一:账单是5,直接收下. •情况二:账单是10,消耗一个5,增加一个10 •情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个 5 class Solution ...
- 149. Leetcode 1005. K 次取反后最大化的数组和 (贪心算法-基础题目)
那么本题的解题步骤为: 第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小 第二步:从前向后遍历,遇到负数将其变为正数,同时K-- 第三步:如果K还大于0,那么反复转变数值最小的元素,将 ...
最新文章
- IIS托管管道模式的集成和经典
- layui学习资料汇总
- E数据结构实验之查找五:平方之哈希表
- 数组到指针的隐式转换
- javadoc - Java API 文档生成器(Windows版本)
- flavr—超级漂亮的jQuery扁平弹出对话框
- navigation笔记
- 仿百度的输入提示功能
- 猫头鹰的深夜翻译:JAVA中异常处理的最佳实践
- 局部敏感哈希(Locality Sensitive Hashing,LSH)
- 漫画追踪器Tracker
- git add 后git reset --hard xxx的代码丢失,代码如何找回
- 到底有多少种病毒?科学家们分析了100多种SARS-CoV-2变种的功能
- ZooKeeper客户端源码(二)——向服务端发起请求(顺序响应+同步阻塞+异步回调)
- Codeforces Round #734 (Div. 3)_B2. Wonderful Coloring - 2(贪心)
- DotSpatial
- 笔记本合上后再打开电源键常亮,无法唤醒,只能强制开机
- IntelliJ IDEA的下载安装与破解
- 交错和 (hihocoder)
- 网址中请求参数中%2c