最大化控制资源成本

题目:

公司创新实验室正在研究如何最小化资源成本,最大化资源利用率,请你设计算法帮他们解决一个任务混部问题:有taskNum项任务,每个任务有开始时间(startTime),结束时间(endTime),并行度(parallelism)三个属性,并行度是指这个任务运行时将会占用的服务器数量,一个服务器在每个时刻可以被任意任务使用但最多被一个任务占用。

输入描述:

第一行输入为taskNum,表示有taskNum项任务,接下来taskNum行,每行三个整数,表示每个任务的开始时间(startTime),结束时间(endTime),并行度(parallelism)

输出描述:

一个整数,表示最少需要得服务器数量

实例:

3

2  3  1

6  9  2

0  5  1

输出:

2

最大化控制资源成本_第1张图片

# 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)

 

你可能感兴趣的:(算法,算法,python)