OD C卷 - 执行任务赚积分

执行任务赚积分(100)

  • 有n个任务需要处理,同一时间只能处理一个任务,处理每个任务所需的时间固定为1;
  • 每个任务都有最晚处理时间和积分,在最晚处理时间之前处理完成才可以获取该任务的积分;
  • 在有限的时间t内,可以获取的最多积分;

输入描述:
第一行输入n,【1,100】
第二行输入t,表示可用于处理任务的总时间单位,【1,100】
随后的n行,每行两个数值s v,分别表示最晚处理时间和积分;s在【1,100】之间,v在【0,100000】之间;
输出描述:
可获取的最多积分

示例1
输入:
4
3
1 2
1 3
1 4
1 5
输出
5
说明:
所有任务只能在1这个最晚时间处理,取最大积分的任务即可;

示例1
输入:
4
3
1 2
1 3
1 4
3 5
输出:
9
说明:
在1这个时间单位处理积分最多为4的任务;在3这个时间单位处理积分为5的任务,还富余一个时间单位无任务处理;所以最大积分为4+5=9

示例3
输入:
5
2
1 2
1 3
2 5
2 7
4 80
输出:
87


import queue


# 总任务数
n = int(input().strip())
# 可处理任务的总时间单位
t = int(input().strip())

# 存储任务
tasks = []
for i in range(n):
    tasks.append(list(map(int, input().strip().split())))

# 任务按照 最晚处理时间 升序排序
tasks = sorted(tasks, key=lambda i: i[0])

print("xxx", tasks)
# 最大积分
max_score = 0
my_queue = queue.PriorityQueue()
time1 = 0
i = 0
while True:
    # 任务索引超出
    if i >= n:
        while my_queue.qsize() > t:
            max_score -= my_queue.queue[0]
            my_queue.get()
        print(max_score)
        break
    else: # 任务索引内
        if time1 < tasks[i][0]:
            my_queue.put(tasks[i][1])
            time1 += 1
            max_score += tasks[i][1]
        else:
            if my_queue.qsize() > 0:
                top = my_queue.queue[0]
                if tasks[i][1] > top:
                    my_queue.get()
                    my_queue.put(tasks[i][1])
                    max_score += tasks[i][1] - top
    i += 1

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值