[贪心]活动安排问题2
2017-05-13 20:28
162 查看
题目大意:有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室?
解题关键:策略: 按照开始时间排序优先安排活动,如果冲突,则加一个教室。
1、利用优先队列
#include<bits/stdc++.h> #define INF 0X3F3F3F3F using namespace std; typedef long long ll; string s; pair<int,int>pp[10002]; int a[26]; bool flag[10002]; int main(){ priority_queue<int,vector<int>,greater<int> >q; int n,count=1; cin>>n; for(int i=1;i<=n;i++){ cin>>pp[i].first>>pp[i].second; } sort(pp+1,pp+n+1); q.push(pp[1].second); for(int i=2;i<=n;i++){ if(pp[i].first>=q.top()){ q.pop(); q.push(pp[i].second); }else{ count++; q.push(pp[i].second); } } printf("%d\n",count); return 0; }
2、求线段相交的次数
#include<bits/stdc++.h> using namespace std; typedef long long ll; vector<pair<int,int> >event; int main(){ int n; scanf("%d",&n); int st,ed; for(int i=0;i<n;i++){ scanf("%d%d",&st,&ed); event.push_back(make_pair(st,1)); event.push_back(make_pair(ed,-1)); } sort(event.begin(),event.end()); int cnt=0,ans=0; for(int i=0;i<event.size();i++){ cnt+=event[i].second; ans=max(ans,cnt); } printf("%d\n",ans); return 0; }
相关文章推荐
- 【算法导论】贪心算法之活动安排问题
- 【算法导论实验5】贪心-活动安排问题与背包问题
- 51nod1428 活动安排问题 (贪心加暴力)
- 51nod 1428 活动安排问题 优先队列+贪心
- 贪心-活动安排问题
- 贪心算法——活动安排问题
- 【贪心】活动安排问题
- 贪心算法 安排活动的问题 最大限度的利用有限资源
- [贪心入门]活动安排问题之二
- 【贪心+优先队列】1428 活动安排问题【51nod】【难度:2级算法题】
- [贪心]FJSDFZOJ 1133 活动安排问题
- 51nod 活动安排问题之二 (贪心+stl)
- 贪心算法_活动安排问题_哈弗曼编码
- 贪心算法-活动安排问题
- 活动安排问题之贪心算法
- (基于Java)算法之贪心算法——活动安排问题
- hdu2037-----------贪心, 活动安排问题
- 51nod 活动安排问题 (贪心)
- 活动安排问题之贪心算法
- 贪心算法之活动安排问题