Сначала я попытался решить эту проблему как проблему сортировки.Но я думаю, что лучше думать об этом как о проблеме оптимизации.Позвольте мне попытаться формализовать проблему.Дано:
- w i : вес стержня i
- l i : длина стержня i
- m i : максимальное расстояние стержня i от начала координат.Если ограничений нет, вы можете установить это значение на сумму (i = 1, n, l i )
Проблема состоит в том, чтобы найти перестановку a i, так что функция стоимости:
J = сумма (i = 1, n, w a i * сумма (j = 1, i-1, l a j ))
сведено к минимуму и ограничения:
сумма (j = 1, i-1, l a j ) <= m <sub>i , 1 <= i<li>
Я думаю, что есть некоторые упущенные возможности сделать лучше, потому что мы сдвигаем некоторые стержни к исходной точке, чтобы они все подходили (на шаге 3), и иногда выбираем тяжелые стержни из этих «сжатых» мести поместите их ближе к источнику (в шаге 4).Это освобождает пространство, но мы не сдвигаем оттянутые стержни назад до пределов их ограниченного положения.Это может быть возможно, но мне придется пересмотреть алгоритм, когда мой мозг работает лучше.
Это не очень эффективный алгоритм.У меня есть ощущение, что это можно сделать в O (n ^ 2), но все, что лучше, потребует творческих структур данных.Вы должны быть в состоянии найти самый тяжелый стержень с длиной меньше заданного L быстрее, чем O (n), чтобы добиться большего успеха.