题目描述
设有�n个活动的集合�={1,2,...�}E={1,2,...n} ,其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动�i 都有一个要求使用该资源的起始时间��si 和一个结束时间��fi ,且 。如果选择了活动�i,则它在时间区间[��,��)[si,fi)内占用资源。若区间[��,��)[si,fi)与区间[��,��)[sj,fj)不相交,则称活动�i与活动�j是相容的。选择出由互相兼容的活动组成的最大集合。
输入格式
第一行一个整数�n
接下来的�n行,每行两个整数��si和��fi
输出格式
输出互相兼容的最大活动个数。
样例
输入
4
1 3
4 6
2 5
1 7
输出
2
数据范围
1≤�≤10001≤n≤1000
#include <cstdio>
#include <iostream>
using namespace std;
void sort(int n, int s[], int f[])
{
int a, b;
for (int i = 1; i <= n; i++)
for (int j = i + 1; j <= n; j++)
{
if (f[i] > f[j])
{
a = f[i];
f[i] = f[j];
f[j] = a;
b = s[i];
s[i] = s[j];
s[j] = b;
}
}
}
int GreedySelect(int n, int s[], int f[])
{
int j = 1, count = 1;
for (int i = 2; i <= n; i++)
{
if (s[i] >= f[j])
{
j = i;
count++;
}
}
return count;
}
int main()
{
int n, s[1000], f[1000];
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> s[i] >> f[i];
}
sort(n, s, f);
cout << GreedySelect(n, s, f) << endl;
return 0;
}