活动安排问题
2017-08-20 09:27
211 查看
51nod 1428 活动安排问题
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室?
Input
第一行一个正整数n (n <= 10000)代表活动的个数。
第二行到第(n + 1)行包含n个开始时间和结束时间。
开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000
Output
一行包含一个整数表示最少教室的个数。
Input示例
3
1 2
3 4
2 9
Output示例
2
题解:
用pair保存每个活动的开始时间和结束时间,之后排序,按开始时间排序,如果开始时间相同则按结束时间排序。用一个优先队列,保存终点,每次取出队头,与数组中的起点进行比较,基本上是模拟选教室的思想。
代码:
#include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<LL,LL> a; const int maxn = 1e5+100; a activity[maxn]; bool cmp(a x,a y) { if(x.first==y.first) return x.second<y.second; return x.first<y.first; } int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>activity[i].first; cin>>activity[i].second; } sort(activity+1,activity+1+n,cmp); priority_queue<int,vector<int>,greater<int> > p; p.push(activity[1].second); for(int i=2;i<=n;i++) { LL tmp = p.top(); if(activity[i].first>=tmp) { p.pop(); p.push(activity[i].second); } else { p.push(activity[i].second); } } cout<<p.size()<<endl; return 0; }
相关文章推荐
- 贪心算法--活动安排问题
- 0021算法笔记——【贪心算法】贪心算法与活动安排问题
- 51Nod 活动安排问题(贪心)
- 贪心算法-活动安排问题
- 51nod 1428 活动安排问题
- 活动选择问题(活动安排问题)(最大数目活动选择问题)贪心算法C++实现
- 活动安排问题(C语言实现)——贪心算法应用(2)
- (基于Java)算法之贪心算法——活动安排问题
- 活动安排问题(贪心算法)
- 51Nod 1428 活动安排问题(会场安排问题/贪心)
- 贪心算法-活动安排问题
- hdu 2037简单贪心--活动安排问题
- 活动安排问题
- 活动安排问题python实现
- 贪心算法_活动安排问题
- 贪心算法及活动安排问题
- 活动安排问题 贪心算法
- 贪心算法-活动安排问题
- 算法设计与分析——活动安排问题——C语言
- 【算法导论实验5】贪心-活动安排问题与背包问题