忙碌的Nova君 (活动安排问题、贪心算法)
题目描述
理论上,Nova君是个大闲人,但每天还是有一大堆事要干,大作业啦,创新杯啦,游戏啦,出题坑人啦,balabala......然而精力有限,Nova君同一时间只能做一件事,并不能一心二用。假设现在有N项工作等待Nova君完成,分别在 Si 时刻开始,在 Ti 时刻结束,对于每项工作可以选择做或者不做,但不可以同时选择时间重叠的工作(即使是开始的瞬间和结束的瞬间重叠也是不允许的)。Nova君自然希望尽量多做一些事情,那么最多能做几件事呢?
输入
多组测试数据(数据组数不超过10),对于每组数据,第一行输入一个正整数N,代表可选的工作数量,接下来输入N行,每行两个正整数,代表第 i 个工作的开始时间 si 和结束时间 ti 。
1<=N<=100000 | 1<=si<=ti<=10^9
输出
对于每组数据,输出一行,为可完成的工作的最大数量。
输入样例
5
1 3
2 5
4 7
6 9
8 10
输出样例
3
题目来源 :http://biancheng.love/contest/23/problem/E/index
解题思路:按照活动结束时间进行排序,先结束的排在前列,后结束的排在后面。
每次放入先结束的活动,将其的结束时间和下一个活动的开始时间进行比较,如果满足下一个活动在上个活动结束之后开始那么将该活动放入进来,依次进行操作,直到最后一个活动为止。输出结果为活动最多数目。
本题代码:
- #include <bits/stdc++.h>
- #define max_size 10010
- using namespace std;
- int order[max_size];
- struct node{
- int start,end;
- int id;
- };
- node act[max_size];
- bool cmp(node a,node b)
- {
- return a.end<b.end;
- };
- int main()
- {
- int n;
- while(~scanf("%d",&n))
- {
- for(int i=;i<n;i++)
- {
- scanf("%d%d",&act[i].start,&act[i].end);
- act[i].id=i+;
- }
- sort(act,act+n,cmp);
- order[]=;
- int number=;
- for(int i=;i<n;i++)
- {
- if(act[i].start>=act[order[number-]].end)
- order[number++]=i;
- }
- cout<<number<<endl;
- }
- }
- 在之前的博客文章讲解活动安排的区别点:
1、之前博客讲述了dp求活动安排问题,也讲述了使用贪心求解。但是之前的问题默认输入的活动已经按照活动结束时间进行了排序,现在这个题目并没有排序。
2、之前的活动可以是下一个活动的开始正好是上一个活动的结束,但是这道题目要求不能够有重合。
下面给出之前博客的链接:http://www.cnblogs.com/zpfbuaa/p/4951105.html
忙碌的Nova君 (活动安排问题、贪心算法)的更多相关文章
- 51nod1428 活动安排问题 (贪心加暴力)
1428 活动安排问题 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动 ...
- 51nod 1428 活动安排问题 (贪心+优先队列)
来源:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 首先按照开始时间从小到大排序. 其实只要维护一个结束时间的最 ...
- hdu 2037简单贪心--活动安排问题
活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子.该问题要求高效地安排一系列争用某一公共资源的活动.贪心算法提供了一个简单.漂亮的方法使得尽可能多的活动 ...
- hdu2037今年暑假不AC(贪心,活动安排问题)
今年暑假不AC Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submi ...
- A - 活动安排问题(贪心)
A - 活动安排问题 有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室? Input第一行一个正整数n (n <= ...
- [C++] 贪心算法之活动安排、背包问题
一.贪心算法的基本思想 在求解过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解. 从贪心算法的定义可以看出,贪心算法不是从整体上考 ...
- 贪心算法求解活动安排<算法分析>
一.实验内容及要求 1.要求按贪心算法原理求解问题: 2.要求手工输入s[10]及f[10],其中注意自己判断s[i]<f[i]: 3.要求显示所有活动及最优活动安排的i事件列表.二.实验步骤 ...
- C++贪心算法实现活动安排问题
问题描述: 设有n个活动的集合E={1,2,…,n},其中,每个活动都要求使用同一资源,而在同一时间内只有一个活动能使用这一资源.每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且s ...
- hdu2037-----------贪心, 活动安排问题
http://acm.hdu.edu.cn/showproblem.php?pid=2037(简单贪心-----活动安排) #include<iostream> #include<a ...
随机推荐
- css - position relative与display table-cell深入分析
在很多时候,想使用 display: table; 以及其子元素使用 display: table-cell 都只是为了使用 vertical-align 这一属性.这是一个很简单的常识,但这次在项目 ...
- How can I exclude directories from grep -R?
‘--exclude-dir=dir’ Exclude directories matching the pattern dir from recursive directory searches. ...
- Node.js建站笔记-使用react和react-router取代Backbone
斟酌之后,决定在<嗨猫>项目中引入react,整体项目偏重spa模式,舍弃部分server端的模板渲染,将一部分渲染工作交给前端react实现. react拥有丰富的组件,虽然不如Back ...
- Mysql学习笔记(五)数学与日期时间函数
学习内容: 1.数学函数 2.日期时间函数 这些函数都是很常用的函数...在这里进行简单的介绍... 数学函数: mysql); //取绝对值函数 这个函数可安全地使用于 BIGINT 值. mysq ...
- 【推荐】iOS集合视图的可重新排序的layout
在实际项目中你或许会遇到在一个集合视图中移动一项到另外一个位置,那么此时我们需要对视图中的元素进行重新排序,今天推荐一个很好用的第三方类LXReorderableCollectionViewFlowL ...
- 安装DRBD的一些问题
安装DRBD,建议用源代码包先生成rpm包来安装,不要用直接download的rpm包,有可能会用不了,因为这跟系统内核版本有关系,在2.6.33版本以前内核没有集成drbd, A.先安装一些其它 ...
- JavaScrip的DOM操作
1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型,文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西 2.Windows对象操作 一.属性和方法 二.Window.open(& ...
- sql跨数据库转移
结构一样的话insert into 数据库A.dbo.TableAselect * from 数据库B.dbo.TableA 另外:nsert into DDD(字段1,字段2,字段3 .....)( ...
- android studio...混淆打包全揭秘
前言,当前android studio使用的版本较新,低版本的如果有差异,或者问题,欢迎拍砖! 1.修改配置文件 找到配置文件,build.gradle,修改如下. signingConfigs ...
- BI之SSAS完整实战教程2 -- 开发环境介绍及多维数据集数据源准备
上一篇我们已经完成所有的准备工作,现在我们就开始动手,通过接下来的三篇文章创建第一个多维数据集. 传统的维度和多维数据集设计方法主要是基于现有的单源数据集. 在现实世界中,当开发商业智能应用程序时,很 ...