51nod_learn_greedy_活动安排2

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

第一行一个正整数n (n <= 10000)代表活动的个数。
第二行到第(n + 1)行包含n个开始时间和结束时间。
开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000

输出

一行包含一个整数表示最少教室的个数。

输入示例

3
1 2
3 4
2 9

输出示例

2

其实就是求某个时间点的最大厚度...一开始傻逼了...想着什么从1开始推过去...必然tle..就没写==然后今天再开...我只要把开始时间和结束时间放在一起排序...从小到大然后用一个boolean做好标记就好...有点像海洋兄的收费站的比喻?

 1 /*************************************************************************
 2     > File Name: code/51nod/learn/greedy/2.cpp
 3     > Author: 111qqz
 4     > Email: [email protected]
 5     > Created Time: 2015年10月05日 星期一 19时24分32秒
 6  ************************************************************************/
 7
 8 #include<iostream>
 9 #include<iomanip>
10 #include<cstdio>
11 #include<algorithm>
12 #include<cmath>
13 #include<cstring>
14 #include<string>
15 #include<map>
16 #include<set>
17 #include<queue>
18 #include<vector>
19 #include<stack>
20 #include<cctype>
21
22 #define yn hez111qqz
23 #define j1 cute111qqz
24 #define ms(a,x) memset(a,x,sizeof(a))
25 using namespace std;
26 const int dx4[4]={1,0,0,-1};
27 const int dy4[4]={0,-1,1,0};
28 typedef long long LL;
29 typedef double DB;
30 const int inf = 0x3f3f3f3f;
31 const int N=1E4+5;
32 int n;
33 struct Q
34 {
35     int t;
36     bool sta;
37 }q[2*N];
38
39 bool cmp(Q a,Q b)
40 {
41     return a.t<b.t;
42 }
43 int main()
44 {
45   #ifndef  ONLINE_JUDGE
46    freopen("in.txt","r",stdin);
47   #endif
48
49    scanf("%d",&n);
50    for ( int i = 0 ; i < 2*n ; i++)
51    {
52        scanf("%d",&q[i].t);
53        if (i%2==0)
54        {
55        q[i].sta = true;
56        }
57        else
58     {
59        q[i].sta = false;
60     }
61    }
62    sort(q,q+2*n,cmp);
63    int ans = -1;
64    int cnt = 0;
65    for ( int i = 0 ; i < 2*n ; i++)
66    {
67        if (q[i].sta)
68        {
69         cnt++;
70        }
71        else
72     {
73         cnt--;
74     }
75        ans = max(ans,cnt);
76    }
77    printf("%d\n",ans);
78
79
80  #ifndef ONLINE_JUDGE
81   fclose(stdin);
82   #endif
83     return 0;
84 }

 
时间: 2024-12-31 03:34:54

51nod_learn_greedy_活动安排2的相关文章

NOJ 1163 活动安排问题 [动态规划]

活动安排问题 时间限制(普通/Java) : 3000 MS/ 9000 MS 运行内存限制 : 65536 KByte总提交 : 202            测试通过 : 55 比赛描述 设有n个活动的集合E={1,2,--,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源.每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si<fi.如果选择了活动i,则它在时间区间[si,fi]内占用资源.若区间[si,fi]与区间[sj,fj

51nod 1428 活动安排问题(优先队列)

1428 活动安排问题 首先按照开始时间从小到大排序. 其实只要维护一个结束时间的最小堆,每次比较开始时间和堆中最小时间的大小,如果比它大就放入堆中并且时间就要变成当前任务的结束时间, 否则就要新开一个教室.并且把结束时间加入堆中,注意判断堆是否为空. #include <cstdio> #include <cstring> #include <queue> #include <algorithm> using namespace std; struct p

贪心算法_活动安排问题_哈弗曼编码

问题表述:设有n个活动的集合E = {1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源.每个活i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si < fi .如果选择了活动i,则它在半开时间区间[si, fi)内占用资源.若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的.也就是说,当si >= fj或sj >= fi时,活动i与活动j相容. 由于输入的活动以其完成时间的非减序排列,所以算法

活动安排问题python实现

活动安排问题要求高效地安排一系列争用某一公共资源的活动,贪心算法提供了一个简单的方法,使尽可能多的活动能兼容地使用公共资源.贪心算法并不总能求得问题的整体最优解,但对于活动安排问题,贪心算法却能做到,使得最终所确定的相容活动集合的规模最大,证明不在这里给出.代码如下: def greedyManage(meeting): length=len(meeting) meeting.sort(key=lambda x:x[1]) result=[False for i in range(length)

hdu2037-----------贪心, 活动安排问题

http://acm.hdu.edu.cn/showproblem.php?pid=2037(简单贪心-----活动安排) #include<iostream> #include<algorithm> using namespace std; struct Node { int l, r; }a[105]; bool Cmp(Node x, Node y) { if(x.r!=y.r) return x.r<y.r; else return x.l>y.r; } int

贪心算法-----单线程:活动安排问题 多线程:多机调度问题

一.贪心算法的特点 顾名思义,贪心算法总是做出在当前看来是最好的选择.虽然贪心算法并不从整体最优上加以考虑,它所做出的选择只是在某种意义上的局部最优选择. 贪心算法的优点是更简单,更直接且解题效率更高,即使贪心算法不能得到整体最优解,但其最终结果却是最优解的很好的近似解. 二.贪心算法的理解 由于涉及到在做出在当前看来最好的选择,所以会经常采用排序算法,推荐使用快速排序算法,复杂度是O(nlgn),且在同等复杂度算法中效率是最高的, 本文涉及的排序都采用冒泡排序,只是注明需要排序而已. 贪心算法

忙碌的Nova君 (活动安排问题、贪心算法)

题目描述 理论上,Nova君是个大闲人,但每天还是有一大堆事要干,大作业啦,创新杯啦,游戏啦,出题坑人啦,balabala......然而精力有限,Nova君同一时间只能做一件事,并不能一心二用.假设现在有N项工作等待Nova君完成,分别在 Si 时刻开始,在 Ti 时刻结束,对于每项工作可以选择做或者不做,但不可以同时选择时间重叠的工作(即使是开始的瞬间和结束的瞬间重叠也是不允许的).Nova君自然希望尽量多做一些事情,那么最多能做几件事呢? 输入 多组测试数据(数据组数不超过10),对于每组

【算法导论实验5】贪心-活动安排问题与背包问题

首先是活动安排问题. 贪心的关键在于排序策略. 思路很简单,对所有活动的结束时间排序,如果结束时间相同,因为要尽量多的参加活动,所以选取开始时间尽量晚的(这样可以安排的比较多),然后依次从早到晚选取不冲突的活动加入,即为最多可以参加的活动. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <fstream> using n

[C++] 贪心算法之活动安排、背包问题

一.贪心算法的基本思想 在求解过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解. 从贪心算法的定义可以看出,贪心算法不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解.如果一个问题可以同时用几种方法解决,贪心算法应该是最好的选择之一. 二.贪心算法的基本要素 (1)最优子结构性质 (2)贪心选择性质(局部最优选择) 三.贪心算法实例 1.活动安排 设有n个活