Это домашнее задание, данное в классе, и мне было интересно, могу ли я получить некоторую помощь.
Проблема в том, что есть старик. А он в парке. Парк состоит из c_1, c_2, c_3, ....c_n
скамеек на длинном одиночном маршруте, где c_1
находится ближе всего к старику, а c_n
— последняя скамья, на которой старик хочет сесть.
В идеале он может пройти 120 футов без посторонней помощи. Однако, если он проедет больше 120 футов, он быстро устанет, а если он проедет меньше, у него будет недостаток времени, чтобы сидеть на скамейке и вставать. Таким образом, за каждую прогулку штраф за прогулку будет равен (120-x)^4
, где x
— это продолжительность прогулки, пройденной до сих пор после того, как он в последний раз отдыхал на скамейке.
Если скамейки расположены через каждые 120 футов друг от друга, это не даст ему никакого штрафа, поскольку он может просто отдохнуть на каждой скамейке, с которой столкнется, и это составит 120 футов перемещения с нулевым штрафом. Очевидно, он может пропустить скамью, если считает, что проехал не 120 футов, а только 10 или 20 футов.
Цель состоит в том, чтобы найти алгоритм, который дает ему минимальный общий штраф, используя динамическое программирование с хорошей временной сложностью. Неважно, сколько раз он отдыхал на скамейке запасных, важно найти список скамеек, который дает минимальный общий штраф.
Как вы думаете, можно ли добиться большей временной сложности, чем O (n ^ 2)? Я думаю, что это очень похоже на проблемы с монетами или проблемы с подсчетом очков в американском футболе, но его штраф «(120-x) ^ 4» за каждое перемещение между двумя скамейками вызывает у меня головную боль.