贪心算法——选择不相交区间问题

题目描述:设有n个活动的集合,其中每个活动都要求使用同一个资源,而在同一时间内只有一个活动能够使用这一资源,每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi(si<fi),如果选择了活动i,则他在时间区间[si,fi)占用资源。求最多可以进行多少个活动。
【输入格式】第一行一个正整数n(n<1000),接下来n行,每行两个整数si和fi
【输出格式】输出尽可能多的相互兼容的活动个数
贪心策略:首先需要以每个活动的结束时间为基准排序(很多问题都需要排序,我们只能在有序中确定策略,凌乱的数据中确定策略显然是梦话。对于这个问题有两个可能的基准:开始时间和结束时间,然后再选择思考顺序:从前往后和从后往前),这里我们选择从前往后思考(至于为什么是这样只能说在思考问题的过程中试出来这样可以解决问题)。
然后从前往后选择活动,如果不冲突就选上。
正确性:对于两个冲突的活动,选择前面的更优:前面的结束时间更早,对后面的影响更小。
对于两个不冲突活动,就选上,活动数更多。
综上:策略正确
代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,cnt,t;
struct node
{int s,f;
}a[1005];
bool cmp(node a,node b)
{return a.f<b.f;
}
int main()
{scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d%d",&a[i].s,&a[i].f);}sort(a,a+n,cmp);t=0; cnt=0;for(int i=0;i<n;i++){if(a[i].s>=t){t=a[i].f;cnt++;}}printf("%d",cnt);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/384193.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Anker—工作学习笔记

http://www.cnblogs.com/Anker/archive/2013/08/17/3263780.html 1、基本知识 epoll是在2.6内核中提出的&#xff0c;是之前的select和poll的增强版本。相对于select和poll来说&#xff0c;epoll更加灵活&#xff0c;没有描述符限制。epoll使用一个文件描述符管理多个描述符&am…

Supervisor监控

可参考&#xff1a;https://www.cnblogs.com/wang_yb/archive/2016/06/08/5564459.html &#xff1a;https://segmentfault.com/a/1190000007379204 转载于:https://www.cnblogs.com/lr1402585172/p/11551488.html

深度搜索剪枝——数的划分

【题目描述】将整数n分成k份&#xff0c;且每份不能为空&#xff0c;问有多少种分法&#xff1f; 【输入格式】两个整数n,m(6<n<200,2<m<6) 【输出格式】输出不同的分法数 【样例输入】7 3 【样例输出】4 对于这种搜索题&#xff0c;关键就在于剪枝&#xff1a;确定…

Linux网络编程——tcp并发服务器(I/O复用之select

http://blog.csdn.net/lianghe_work/article/details/46519633 与多线程、多进程相比&#xff0c;I/O复用最大的优势是系统开销小&#xff0c;系统不需要建立新的进程或者线程&#xff0c;也不必维护这些线程和进程。 代码示例&#xff1a; [csharp] view plaincopy #include &…

ets

:ets.new(table_name, pattern) 第一个参数是表名&#xff0c;第二个参数是表的设置选项。 :set  一个key&#xff0c;一个数据&#xff0c;无序 :ordered_set  一个key&#xff0c;一个数据&#xff0c;有序&#xff1b; 1 1.0 :bag  一个key&#xff0c;多个数据&…

贪心算法-区间选点问题-种树

【题目描述】一条街道的一边有几座房子。因为环保原因居民想要在路边种些树&#xff0c;路边的地区被分割成n块&#xff0c;并被编号为1~n。每块大小为一个单位尺寸且最多可总一棵树。每个居民想在门前种些树并制定了三个数b,e,t&#xff0c;这三个数代表居民想在b和e之间最少种…

ets注意事项

当表类型为 :set 时&#xff0c;使用 :ets.first 和 :ets.last 会获取到同一个 key。将表类型换为 :oedered_set 就可以避免这种情况 转载于:https://www.cnblogs.com/lr1402585172/p/11599219.html

CodeForces - 1141CPolycarp Restores Permutation搜索+剪枝

Polycarp Restores Permutation 【题意分析】题意大概是给定一个串&#xff0c;包含从1到n所有的数字。但是给定的是相邻数字的差&#xff0c;需要复原这个串。 大概分析以后发现给定的是一个差分数组&#xff0c;所以只需要枚举第一个元素就可以确定所有元素的值。 问题是如何…

CodeForces - 1141ESuperhero Battle简单模拟

Superhero Battle 这道题卡了我一个多小时&#xff0c;最后也没有做出来&#xff0c;成功称为吊车尾。。。 思路什么的都没有问题&#xff0c;主要是&#xff0c;爆long long了&#xff0c;这个太可怕了&#xff0c;就因为一个中间变量忘记开longlong导致一直一直wa&#xff0c…

Linux下的I/O复用与epoll详解

http://www.cnblogs.com/lojunren/p/3856290.html 前言 I/O多路复用有很多种实现。在linux上&#xff0c;2.4内核前主要是select和poll&#xff0c;自Linux 2.6内核正式引入epoll以来&#xff0c;epoll已经成为了目前实现高性能网络服务器的必备技术。尽管他们的使用方法不尽相…

校门外的树——树状数组+区间修改

校门外的树 【题目分析】题目描述的是一种区间修改&#xff0c;看起来好像要用线段树。但是对于这种区间内部没有差别并且查询的是区间内的类别的问题&#xff0c;是可以转化为树状数组进行的。毕竟树状数组更加简单。 我们的关注点应该放在区间的端点处&#xff0c;然后通过统…

数据结构--顺序栈和链式栈

http://www.cnblogs.com/jingliming/p/4602458.html 栈是一种限定只在表尾进行插入或删除操作,栈也是线性表表头称为栈的底部,表尾称为栈的顶部,表为空称为空栈&#xff0c;栈又称为后进先出的线性表,栈也有两种表示:顺序栈与链式栈顺序栈是利用一组地址连续的存储单元&#xf…

CodeForces - 1144F搜索+简单图论

【题目链接】Graph Without Long Directed Paths 【题目分析】题目想要讲一个无向图变成一个最长路径不超过1的有向图。假如某个边是从u到v的&#xff0c;那么所有和v相连的都必须是指向v的&#xff0c;所有和u相连的都必须是从u开始的。相当于涂色&#xff0c;相连的节点应该涂…

数据结构--双链表的创建和操作

http://www.cnblogs.com/jingliming/p/4602144.html#0-tsina-1-42616-397232819ff9a47a7b7e80a40613cfe1 一、双向链表的定义 双向链表也叫双链表&#xff0c;是链表的一种&#xff0c;它的每个数据结点中都有两个指针&#xff0c;分别指向直接后继和直接前驱。所以&#xff0c…

CodeForces - 1152B二进制+思维

【题目链接】Neko Performs Cat Furrier Transform 【题目分析】要求将一个数字变成2n-1,通过尝试我们发现如果将最低位的全零位和对应的全一数字&#xff08;例如11000对应的就是111&#xff09;异或那么数字就会变成想要的结果&#xff08;11111&#xff09; 但是如果前面还有…

C语言文件操作之fgets()

http://blog.csdn.net/daiyutage/article/details/8540932 来说一说fgets(..)函数。 原型 char * fgets(char * s, int n,FILE *stream); 参数&#xff1a; s: 字符型指针&#xff0c;指向存储读入数据的缓冲区的地址。 n: 从流中读入n-1个字符 stream &#xff1a; 指向读取…

指针与零的比较以及浮点型与零的比较

指针和零的比较 int *p null;if(p ! null){p 20; } 整形和零的比较 int i 0; if(0i) {... } 浮点型和零的比较 判断一个浮点数是不是零 #define EXP 0.0000000000001 float f 0.00001; if((f > -EXP)&&(f < EXP)) {... } 扩展后 判断一个浮点数是不…

CodeForces 1138B暴力+剪枝

【题目链接】Circus 【题目分析】理解题意以后发现并没有什么思路&#xff0c;没有什么算法能用&#xff0c;这个时候就应该想到计算机解题的本质——暴力求解。相应的就要想到剪枝的条件&#xff0c;肯定不能盲目的暴力求解。 总共有四种人&#xff1a;00,01,10,11&#xff0c…

MYSQL错误代码#1045 Access denied for user 'root'@'localhost'

http://blog.csdn.net/lykezhan/article/details/70880845 遇到MYSQL“错误代码#1045 Access denied for user rootlocalhost (using password:YES)” 需要重置root账号权限密码&#xff0c;这个一般还真不好解决。 不过&#xff0c;这几天调试的时候真的遇到了这种问题&#x…

C语言操作符

移位表达式 左移操作符<< 左边抛弃,右边补零 右移操作符>> 1.逻辑右移 左边补零,右边丢弃 2.算数右移 左边补符号位,右边丢弃 注意: 1.左移一位相当于乘2,右移一位相当于除2,并且在内存中存放的是二进制的补码,且移位操作符只对int型数操作 2.移位操作符不要移动…