几年暑假不ac。
这道题是经典贪心。
方法是按照每个节目结束的时间进行排序。若这个节目的开始时间大于等于上一个节目结束的时间则可以看。
排序法一:(冒泡)
#include<iostream>
using namespace std;
#include<stdio.h>
#include<algorithm>
int main()
{
int n;
int a[100],b[100];
while(scanf("%d",&n) != EOF && n)
{
int i;
for(i = 0;i < n; i++)
scanf("%d%d",&a[i],&b[i]);
int max1,j;
for(i = 0;i < n; i++)
for(j = i;j < n; j++)
if(b[i] > b[j])
{
max1 = a[j];
a[j] = a[i];
a[i] = max1;
max1 = b[j];
b[j] = b[i];
b[i] = max1;
}
int num = 0;
int bagin = 0;
for(i = 0;i < n; i++)
if(a[i] >= bagin)
{
num++;
bagin = b[i];
}
printf("%d\n",num);
}
return 0;
}
排序法二 :(sort)
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
class Time
{
public:
int bagin;
int end;
};
bool cmp(Time a,Time b)
{
return a.end<b.end;
}
int main()
{
Time a[100];
int n;
while(scanf("%d",&n) != EOF && n)
{
int i;
for(i = 0;i < n; i++)
scanf("%d%d",&a[i].bagin,&a[i].end);
sort(a,a+n,cmp);
int num = 0;
int t = 0;
for(i = 0;i < n; i++)
if(a[i].bagin >= t)
{
num ++;
t = a[i].end;
}
printf("%d\n",num);
}
return 0;
}