贪心算法
活动安排问题
设有n个活动的集合E={1,2,3,…,n},所有的活动要求使用同一资源,而在同一时间内只有一个活动能使用这一资源,每个活动都有使用这一资源的开始时间si和结束时间fi,且si<fi。目标:要在所给的活动中,找出最大的相容的活动子集合。
贪心策略:先按右端点从小到大排序,再按左端点从小到大。
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
typedef struct Node{
int begin, end;
}Node;
Node a[N];
//比较,按照结束时间从小到大排序
int cmp(Node a, Node b){
return a.end < b.end;
}
int main()
{
int n;
scanf_s("%d", &n);
for (int i = 0; i < n; i++)
scanf_s("%d%d", &a[i].begin, &a[i].end);
//函数
sort(a, a + n, cmp);
int ans = 1;
int end = a[0].end;
for (int i = 1; i < n; i++){
if (end < a[i].begin){
end = a[i].end