选择不相交区间-蓝桥解题

有n项工作,每项工作分别在si时间开始,在ti时间结束.

对于每项工作,你都可以选择参与与否.如果选择了参与,那么自始至终都必须全程参与.

此外,参与工作的时间段不能重复(即使是开始的瞬间和结束的瞬间的重叠也是不允许的).

你的目标是参与尽可能多的工作,那么最多能参与多少项工作呢?

1≤n≤100000

1≤si≤ti≤10^9

输入:
第一行:n
第二行:n个整数空格隔开,代表n个工作的开始时间
第三行:n个整数空格隔开,代表n个工作的结束时间

样例输入:

5
1 2 4 6 8
3 5 7 9 10

样例输出:

3 说明:选取工作1,3,5
n_start = map(int, input().split())
n_end = map(int, input().split())
n = list(zip(n_start, n_end))
x = sorted(n, key=lambda x: x[-1])

count = 1
i = 0
q = []
q.append(x[0])
while True:
    if i >= len(x)-1:
        break
    for j in range(i+1,len(x)):
        if i == len(x) -1:
            i+=1
            break
        if x[i][-1] < x[j][0]:
            i = j
            q.append(x[i])
            count += 1
            break
print(count, q)

# 3 [(1, 3), (4, 7), (8, 10)]
posted @ 2021-02-04 19:02  EdenWu  阅读(84)  评论(0编辑  收藏  举报