贪心-电影节
电影节:大学生电影节在北大举办! 这天,在北大各地放了多部电影,
给定每部电影的放映时间区间,区间重叠的电影不可能同时看(端点可以重合),
问李雷最多可以看多少部电影。
输入:多组数据。每组数据开头是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()