"общее расстояние, пройденное всеми колышками
должно быть как минимум "
Если я что-то упустил, это не проблема.
Поскольку порядок колышков необходимо поддерживать, вы можете просто нумеровать колышки 1, 2, 3, ...
+ - 1234 - + - + --- + --- 5 - + ------ + - + - 678 + 9 - + ------- 10 - + ----- 11-12 - + - 13
и конечное состояние должно быть: колышек 1 в слоте 1, колышек 2 в слоте 2 и т. Д.
+ - 1 - + - 2 - + - 3 - + - 4 - + - 5 - + - 6 - + - 7 - + - 8 - + - 9 - + - 10 - + - 11 - + - 12 - + - 13 - +
Неспособность прыгать колышки мимо друг друга не имеет значения, каждый колышек должен перемещаться на определенное расстояние от своей начальной точки до своей конечной точки. Пока все движения в правильном направлении и колышек никогда не должен отступать , тогда расстояние, которое должен пройти каждый отдельный колышек, является простой константой (она не зависит на порядок ходов) и сумму этих расстояний, ваша функция стоимости также постоянна.
Я не вижу здесь необходимости в динамическом программировании или в оптимизации линейного программирования.
Если вы введете стоимость подбора колышка и его установки, то, возможно, здесь есть проблема с оптимизацией, но даже это может быть тривиально.
Редактировать в ответ на 1800 Комментарий информации
Это верно только в том случае, если число
Слоты равны количеству колышков -
это не предполагалось в проблеме
выписка - 1800 ИНФОРМАЦИЯ (2 часа
назад)
ОК, я пропустил это. Спасибо, что указали на то, что мне не хватало. Я до сих пор не уверен, что это ракетостроение.
Предположим, # колышки> # отверстия. Вычислите конечное состояние, как указано выше, как если бы у вас были дополнительные отверстия; затем выберите N колышков, которые были перемещены дальше всего, и удалите их из задачи: это те, которые не были перемещены. Пересчитайте, игнорируя эти колышки.
Предположим, # отверстия> # колышки. Правильное конечное состояние может иметь или не иметь пробелы. Вычислите конечное состояние, как указано выше, и посмотрите, где соседние колышки смещены друг к другу. Это те точки, где вы можете разбить его на подзадачи, которые могут быть решены тривиально. Есть одна дополнительная переменная, когда у вас есть отверстия на обоих концах смежной подзадачи - там, где начинается финальная смежная последовательность.
Да, сначала это немного сложнее, чем я думал, но все же кажется, что небольшая работа с карандашом и бумагой должна показать, что решение - это пара легко понятных и кодированных циклов.