简单题意:
有很多电视节目,已知转播时间表,合理安排,以看更多的电视节目。
输入n,有n行数据,表示每个节目的起始时间和终止时间。
输出最多能看的电视节目数。
样例:
12 1 3 3 4 0 7 3 8 15 19 15 20 10 15 8 18 6 12 5 10 4 14 2 9 0
解题思路形成过程:
读完题意意识到这是贪心算法实现的。
将每个电视节目的起始时间 s 和结束时间 f 放在一个结构体里。按照结束时间排序。以第一组的 f 作为基础,寻找下一组的 s >=f 的组,以找到的组的 f 再作为基础以此类推,没找到一个计数+1。
感想:
第一次这么迫不及待的发表博客,是为了鼓励自己。做这个别人看似很简单的题目,其实我改了很久,一次一次WA,CE,到最后一次AC,我自知自己差别人还有很远很远。但我想就一点一点往前走,积跬步,积小流。
AC代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
struct tv{
int s;
int f;
};
bool cmp(const tv & a,const tv & b)
{
if(a.f<=b.f)
return true;
return false;
};
int main()
{
int n;
int count=1;
int preend=1;
tv a[100];
while(cin>>n&&n!=0)
{
preend=1;
count=1;
for(int i=1;i<=n;++i)
{
cin>>a[i].s>>a[i].f;
}
sort(a,a+n+1,cmp);
for(int i=2;i<=n;i++)
{
if(a[i].s>=a[preend].f)
{
count++;
preend=i;
}
}
cout<<count<<endl;
memset(&a,0,sizeof(a));
}
return 0;
}