此题为贪心的区间覆盖,应尽可能选结束时间最早的科目。
以下是此题代码(c++格式)
#include<bits/stdc++.h>
using namespace std;
//创建结构体,l代表左区间,r代表右区间
struct seg
{
    int l,r;
};
//实现优先对区间右端点从小到大的排序bool
bool cmp(seg a,seg b)
{
    return a.r<b.r;
}
int main()
{
    int L=0;
    int R=24;//L,R为基本常识代表端点0点到24点
    int n;
    cin>>n;
    vector<seg>s(n);//存储区间
    for(int i=0;i<n;i++)
    {
        cin>>s[i].l>>s[i].r;
    }
    sort(s.begin(),s.end(),cmp);//将区间按照cmp形式排序
    int cnt=0;//区间个数
    int last=0;//上一个区间末尾
    for(int i=0;i<n;i++)
    {
        if(s[i].l>=last&&s[i].l>=L&&s[i].r<=R)//这区间的开始时间得大于上一个区间的结束区间而且不能超过最大区间范围
        {
            cnt++;
            last=s[i].r;//更新上一个区间末尾

        }
    }
    cout<<cnt<<endl;//输出答案
    return 0;
}