贪心
先按结束时间排序,结束时间越早,越能为后面的节目留出时间;
然后,按开始时间选择
从排好序的第一个开始,如果下一个节目b的开始时间 >=当前节目a的结束时间,则+1,并且让当前节目变为b;
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct node
{
int start;
int dead;
}t[110];
bool cmp(node a,node b)
{
return a.dead<b.dead;
}
int main()
{
int n,a;
while(scanf("%d",&n)==1&&n!=0)
{
for(int i=0;i<n;i++)
{
scanf("%d %d",&t[i].start,&t[i].dead);
}
sort(t,t+n,cmp);
a=t[0].dead;
int cnt=1;
for(int i=1;i<n;i++)
{
if(t[i].start>=a)
{
cnt++;
a=t[i].dead;
}
}
printf("%d\n",cnt);
}
return 0;
}
还不是很会C++,这里使用C++只是因为快排方便。。。。