当前位置: 代码迷 >> 综合 >> 贪心算法--电影节(openjudge 4151 )
  详细解决方案

贪心算法--电影节(openjudge 4151 )

热度:10   发布时间:2023-12-08 19:13:45.0


总时间限制: 
1000ms 
内存限制: 
65536kB
描述
大学生电影节在北大举办! 这天,在北大各地放了多部电影,给定每部电影的放映时间区间,区间重叠的电影不可能同时看(端点可以重合),问李雷最多可以看多少部电影。
输入
多组数据。每组数据开头是n(n<=100),表示共n场电影。
接下来n行,每行两个整数(0到1000之间),表示一场电影的放映区间
n=0则数据结束
输出
对每组数据输出最多能看几部电影
样例输入
8
3 4
0 7 
3 8 
15 19
15 20
10 15
8 18 
6 12 
0
样例输出
3



#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;struct Film {int f;int e;
};
bool operator<(const Film & t,const Film & c)//重载操作符;
{if(t.e==c.e)return t.f<c.f;elsereturn t.e<c.e;
}//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
//0int main()
{Film film[1100];int n;while(scanf("%d",&n)&&n!=0){for(int i = 0;i<1100;i++)film[i].f = film[i].e = 0;for(int i = 0;i < n; ++i)scanf("%d%d", &film[i].f , &film[i].e);sort(film,film+n);
//
//        for(int i = 0;i<n;i++)
//            cout <<film[i].f<<" "<<film[i].e<<endl;
//int total = 0;int first =0;for(int i = 0;i < n; ++i)if( first<=film[i].f&&film[i].e <= film[n-1].e){total++;first = film[i].e;}printf("%d\n",total);}return 0;
}