Я столкнулся с проблемой, которая заключается в следующем: на парковке есть машины, каждый водитель берет определенную сумму, чтобы припарковать свою машину, водитель будет недоволен, если время, которое он должен ждать, больше, чем времяон берет, чтобы припарковать машину, что означает, что водители, которые находятся впереди его в очереди, занимают больше времени, чтобы припарковать свои машины.Я хочу найти последовательность, которая минимизирует количество драйверов в линии.Например: 2 15 1 5 3 -> это последовательность драйверов в линии.Первый водитель, очевидно, будет счастлив, так как ему не нужно никого ждать, второй в строке (15) занимает 15 минут для парковки, но должен ждать только 2 минуты, поэтому он тоже будет счастлив, проблема начинается с третьеговодитель и тд.Я хочу переставить их так, чтобы количество недовольных водителей было минимальным.Я пришел к решению, которое находит все варианты элементов в списке и находит несчастные драйверы для каждого из них, но кажется, что оно очень медленное, когда количество драйверов увеличивается на огромную величину.Мой код:
import itertools
driverList = input().split()
for i in range(len(driverList)):
driverList[i] = int(driverList[i])
permutationList = []
permutationList += list(itertools.permutations(driverList))
maxCount = 1
for i in range(len(permutationList)):
count = 1
sumCount = permutationList[i][0]
for j in range(1, len(permutationList[i])):
if permutationList[i][j] > sumCount:
count += 1
sumCount += permutationList[i][j]
if count > maxCount:
maxCount = count
print(maxCount)
Есть ли какой-либо другой способ или структура данных, которые я могу использовать, чтобы сделать этот алгоритм намного более эффективным.Большое спасибо.Ответом для ввода «2 15 1 5 3» будет 4, этот ответ задается причиной, если автомобили переставляются в последовательности «1 3 5 2 15», количество счастливых водителей будет 4.
- 1> 0 (счастливый)
- 3> 1 (счастливый)
- 5> 3 + 1 (счастливый)
- 2 <5 + 3 +1 (несчастный) </li>
- 15> 2 + 5 + 3 + 1 (счастливый)