问题 F: 节目安排
题目描述
假期到了,天宝终于可以无压力的看电视了。
但是他喜欢的节目有点多,如何尽可能多的看到完整的节目。
他把喜欢的节目时间表给你,请帮他安排一下吧。
输入
输入包含多组测试数据。每组输入的第一行是一个整数n(n<=100),
表示天宝喜欢的节目的总数。
接下来n行,每行输入两个整数si和ei(1<=i<=n),
表示第i个节目的开始和结束时间,
为了简化问题,每个时间都用一个正整数表示。
当n=0时,输入结束。
输出
对于每组输入,输出能完整看到的电视节目的个数。
样例输入
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
0
样例输出
5
解答(贪心算法):
while True:
# 制造一个永久循环体
try:
n = int(input())
if n == 0:
break
# 如果首位为0则直接结束本轮进入下一轮
li = []
for i in range(n):
nn = tuple(map(int, input().split()))
# 以元组的方式读取
li.append(nn) # 添加到列表
li.sort(key=lambda x: x[1])
# 对节目的结束时间进行排序
# 注意li是一个二维列表
res = [li[0]] # 把最早结束的节目存入列表中
for i in range(1, n): # 遍历后面的活动
if li[i][0] >= res[-1][1]:
# 比较排序后第i+1个节目的开始时间[0]
# 和上一次最后存入res的节目结束时间[1]的大小
res.append(li[i])
# 如果为真则将这个活动添加到res的末尾
print(len(res))
except:
break
答案不唯一,必定有更加优化的解法欢迎分享