区间选点复习:贪心

区间选点问题:

D. 课程选择

题目描述:

辅导机构周末共有n个课程,每个课程有起始时间 begini 和结束时间 endi(begini<endi),在同一时间,学生只能参加一个课程,且只有全程参加课程才会有收获。

由于有些课程时间上有冲突,家长们又希望孩子学到更多的东西,所以怎么安排才能让学生参加的课程数最多呢?

输入格式:

第一行一个整数 n(n≤1000) ;

接下来的 n 行,每行两个整数,第一个 begini,第二个是 endi(0≤begini<endi≤32767)。

输出格式:

输出最多能参加的课程个数。

样例输入1:

3 0 6 0 4 4 8

样例输出1:

2
框架:


代码:

#include <bits/stdc++.h>
using namespace std;
struct node{
	int be;
	int end;
}a[100005];
bool cmp(node a,node b){
	return a.end<b.end;
}
int main(){
	int n,sum=0;
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i].be>>a[i].end;
	sort(a+1,a+n+1,cmp);//区间选点都是这样
	int l=a[0].be,r=a[0].end;
	for(int i=1;i<=n;i++){
		if(a[i].be>=r){
			l=a[i].be;//更新边界并累加答案
			r=a[i].end;
			sum++;
		}
	}
	cout<<sum;
	return 0;
}
4 个赞