活动安排
描述:
设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si
输入:
输入只有一个用例,第一行为一正整数n,表示活动个数,接下来n行,每行两个整数,分别表示第i号活动的起始时间和结束时间。
输出:
用一行输出所能安排的最多活动数。
样例输入:
11
5 9
0 6
12 14
8 12
1 4
3 5
5 7
3 8
6 10
8 11
2 13
样例输出:
4
题解:采用的是贪心算法。现将所有活动的结束时间排序,这样安排活动是最多的。
AC code:
#include <iostream>
#include <algorithm>
using namespace std;
struct Act
{
int start,end;
};
bool cmp(Act a,Act b)
{
if(a.end!=b.end)
return a.end<b.end;
else
return a.start<b.start;
}
int main()
{
int n,i;
Act *a;
while(cin>>n)
{
a = new Act[n];
for(i=0; i<n; i++)
{
cin>>a[i].start>>a[i].end;
}
sort(a,a+n,cmp);
int sum=1,pre=0;
for(i=1; i<n; i++)
{
if(a[i].start>=a[pre].end)
{
sum++;
pre = i;
}
}
cout<<sum<<endl;
delete [] a;
}
return 0;
}