Во-первых, как сказал Чакрадар Раджу, эмуляция всей процедуры не является хорошим способом реализовать работу для ее огромного диапазона.И вам нужно использовать типы с более широким диапазоном, чем int, например что-то вроде long long, которое является 64-битным int.
, а затем попытаться найти хороший алгоритм для его решения.Я предоставлю метод и хочу, чтобы он работал.
Каждый раз, когда мы рассматриваем задачу с номером i, а когда дело доходит до последней секунды i-й задачи, все задачи короче, чем она выполнена.Нам нужно только подвести итоги их стоимости.Для задач не короче i-й задачи, мы предполагаем, что i-я задача занимает Ti секунд.Задачи не короче этого и сама i-я задача работают как (Ti - 1) секунды, так и для своей (Ti) -ой обработки только задачи перед i-й задачей.Суммируйте их, и вы получите ответ.
Возьмите пример в качестве примера:
Для 1-го задания это занимает 8 секунд, а задачи короче, чем оно имеет 1 +3 + 3 = 7 секунд, затем для него и 5-го задания требуется 7 секунд, поэтому значение равно 7 * 2 = 14 секунд.Тогда нет задачи перед i-й задачей, поэтому нам нужно всего лишь добавить 1 секунду для самой 1-й задачи.Результат 7 + 14 + 1 = 22 * 1009 *
Может быть, это не совсем понятно, давайте посмотрим на 3-е задание, оно занимает 3 секунды, и только 1 задание короче его (второе, которое занимает 1 секунду).И все оставшиеся задачи занимают 3 - 1 = 2 секунды, это 4 * 2 = 8 секунд.Наконец, перед ним осталась только одна задача, так что только она запускается в третий раз.Добавляем и третий раз обрабатываем сам.Результат равен 1 + 8 + 1 + 1 = 11 секунд.
При кодировании необходимо запомнить порядковый номер задачи и отсортировать его по времени обработки.Тогда все задачи короткие, а затем их перед ним.Левое задание - это линейная обработка времени, и для сортировки требуется время (nlogn), которое достаточно быстро для завершения задания.