题目:
公司创新实验室正在研究如何最小化资源成本,最大化资源利用率,请你设计算法帮他们解决一个任务混部问题:有taskNum项任务,每个任务有开始时间(startTime),结束时间(endTime),并行度(parallelism)三个属性,并行度是指这个任务运行时将会占用的服务器数量,一个服务器在每个时刻可以被任意任务使用但最多被一个任务占用。
输入描述:
第一行输入为taskNum,表示有taskNum项任务,接下来taskNum行,每行三个整数,表示每个任务的开始时间(startTime),结束时间(endTime),并行度(parallelism)
输出描述:
一个整数,表示最少需要得服务器数量
实例:
3
2 3 1
6 9 2
0 5 1
输出:
2
# coding:utf-8
#JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
import functools
import collections
import queue
def comp(a, b):
return a - b
def comp1(a, b):
return a[0] - b[0]
result_machine = 0
#处理输入
task_num = input()
i = int(task_num)
ranges = []
while(i>0):
input_str = input()
input_list = [int(x) for x in input_str.split(" ")]
ranges.append(input_list)
i=i-1
#区间排序
ranges = sorted(ranges, key=functools.cmp_to_key(comp1))
pq = queue.PriorityQueue()
res = 0
temp_res = 0
for i in range(len(ranges)):
while pq.qsize() > 0:
top = pq.queue[0]
if top[0] < ranges[i][0]:
poll = pq.get()
temp_res -= poll[1]
else:
break
pq.put((ranges[i][1], ranges[i][2]))
temp_res += ranges[i][2]
if temp_res > res:
res = temp_res
print(res)