4151:电影节
总时间限制:
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
来源
Guo Wei
#include<iostream>
using namespace std;
#include<cstdio>
#include<algorithm>
struct film {
int start;
int end;
};
int cmp(film m, film n) {
return m.end < n.end;
}
int main() {
int n;
film m[105];
while (cin >> n && n != 0) {
for (int i = 0; i < n; i++) {
cin >> m[i].start >> m[i].end;
}
sort(m, m + n, cmp);
int sum = 1;
int times = m[0].end;
for (int i = 1; i < n; i++) {
if (m[i].start >= times) {
sum++;
times = m[i].end;
}
}
cout << sum << endl;
}
return 0;
}
用贪心算法
先按照电影的结束时间由小到大排序
然后根据时间来判断上一场电影的结束时间与下一场的开始时间是否发生冲突
不发生冲突 就更新一波时间 电影数+1
发生冲突 看下下场电影的情况
需要注意区间重叠的电影不可能同时看(端点可以重合)