刚开始不知道怎么做,以为是动态规划之类的
后来才发现是贪心即可
就是把节目根据结束时间排序,然后选择结束最早的节目,再选择下一个能选择的节目里结束最早的节目,就这样一直选下去即可
然后要注意节目可以无缝衔接,即比较的时候是<=而不是单纯的<
代码如下:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct tv{
int s;
int e;
}p[101];
bool com(tv a,tv b)
{
return a.e<b.e;
}
int main()
{
int n;
scanf("%d",&n);
while(n!=0){
memset(p,0,sizeof(p));
for(int i=1;i<=n;i++)
scanf("%d%d",&p[i].s,&p[i].e);
sort(p+1,p+n+1,com);
int count=0;
int flag=0;
for(int i=1;i<=n;i++){
if(p[i].s>=flag){
count++;
flag=p[i].e;
}
}
printf("%d\n",count);
scanf("%d",&n);
}
return 0;
}