贪心-电影节

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