电影节:大学生电影节在北大举办! 这天,在北大各地放了多部电影,
给定每部电影的放映时间区间,区间重叠的电影不可能同时看(端点可以重合),
问李雷最多可以看多少部电影。
输入:多组数据。每组数据开头是n(n<=100) 100),表示共n场电影。
接下来n行,每行两个整数 均小于 1000 ),表示一场电影的放映区间
n=0则数据结束
输出:对每组数据输出最多能看几部电影
Sample Input
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
Sample Output
5
思路:贪心解法,将所有电影按结束时间从小到大排序,第一步选结束时间最早的
那部电影。 然后,每步都选和上一部选中的电影不冲突且结束时间最早的电影。
python代码实现:
def main():
# 电影列表
movie_list = []
# 总共可以看多少部电影
total = 1
# n部电影
n = int(input())
for i in range(n):
temp = list(map(int, input().split()))
movie_list.append(temp)
movie_list = sorted(movie_list, key=lambda x: x[1])
# [[1, 3], [3, 4], [0, 7], [3, 8], [2, 9], [5, 10],
# [6, 12], [4, 14], [10, 15], [8, 18], [15, 19], [15, 20]]
# 第一部影片的最早结束时间
end_time = movie_list[0][1]
for i in range(1, len(movie_list)):
# 如果下一部影片的晚于或者等于上一部的结束时间,则可以看
if end_time <= movie_list[i][0]:
end_time = movie_list[i][1]
total += 1
print("最多能看%d部电影" % total)
if __name__ == '__main__':
main()