ХОРОШО. Алгоритм DP кажется излишне сложным. После прочтения комментариев я думаю, что это может решить монотонную версию проблемы (но я не проверял каждую деталь).
Сначала предположим, что каждый , где является неотъемлемой частью, является дробной частью. Предположим, что округлено до , где - неотрицательное целое число (конечно, в общем случае может быть отрицательным, но мы всегда можем сдвинуться так, чтобы наименьшее значение 0).⌊ x i ⌋ { x i } x i ⌊ x i ⌋ + v i v i v i v iИкся= ⌊ хя⌋ + { xя}⌊ хя⌋{ хя}Икся⌊ хяV + vяvяvяvя
Теперь рассмотрим стоимость пары , при выполнении этого округления. Стоимость должна бытьх JИксяИксJ
| | vя- vJ+ ⌊ хя⌋ - ⌊ xJ⌋ | - | { хя} - { xJ} + ⌊ xя⌋ - ⌊ xJ⌋ | |
Выражение сложное из-за абсолютных значений. Однако обратите внимание, что у нас есть монотонность, поэтому вещи внутри двух внутренних абсолютных значений должны иметь тот же знак. Поскольку у нас есть внешнее абсолютное значение, на самом деле не имеет значения, что это за знак, выражение просто упрощается до
| vя- vJ- ( { хя} - { xJ} ) |
Отныне мы не предполагаем, что решение является монотонным, но вместо этого мы меняем цель, чтобы минимизировать сумму вышеуказанного члена для всех пар. Если решение этой проблемы оказывается монотонным, то, конечно, это также оптимальное решение для монотонной версии. (Думайте об этом как: исходная задача имеет бесконечное наказание, когда решение не является монотонным, новая проблема имеет меньшее наказание, если монотонное решение выигрывает даже в новой версии, это должно быть решение монотонной версии)
Теперь мы хотели бы доказать, что если , то в оптимальном решении должно быть .v i ≥ v j{ хя} > { xJ}vя≥ vJ
Предположим, что это не так, что у нас есть пара но . Покажем, что если мы местами решение станет строго лучше.v i < v j v i v j{ хя} > { xJ}vя<vJvя vJ
Сначала мы сравним термин между и , здесь действительно ясно, что подкачка строго лучше, потому что в не-своп версии, и имеют одинаковый знак, абсолютный значение будет суммой двух абсолютных значений.j v i - v j { x j } - { x i }ijvi−vj{xj}−{xi}
Теперь для любого сравним сумму пар и . То есть нам нужно сравнить( i , k ) ( j , k )k(i,k)(j,k)
| v j - v k - ( { x i } - { x k } ) | + | v|vi−vk−({xi}−{xk})|+|vj−vk−({xj}−{xk})|и,|vj−vk−({xi}−{xk})|+|vi−vk−({xj}−{xk})|
Использование , , , , чтобы обозначить четыре условия внутри абсолютного значения, то ясно , что . Также ясно, что, По выпуклости абсолютного значения мы знаем, Взять сумму по всем , мы знаем, что обмен может быть только лучше.B C D A + B = C + D | A - B | ≥ | C - D | | A | + | Б | ≥ | C | + | D | х кABCDA+B=C+D|A−B|≥|C−D||A|+|B|≥|C|+|D|xk
Обратите внимание, что теперь у нас уже есть решение для версии Monotonic floor / ceil: должен быть порог, когда больше всегда округляется вверх, когда он меньше всегда округляется вниз, когда он равен округлению вверх и некоторые вниз, а качество решения зависит только от количества. Мы перечислим все эти решения и выберем решение с наименьшей целевой функцией. (Все эти решения обязательно являются монотонными).{xi}
Наконец, мы хотели бы перейти к монотонной целочисленной версии задачи. Фактически мы можем доказать, что оптимальное решение такое же, как и в монотонной версии пола / потолка.
Как мы и предполагали, наименьшее значение равно 0. Сгруппируйте все значения по их и назовите их группой . Сначала мы докажем, что нет пустых групп, но это просто, если группа пуста, для любого просто пусть . Легко видеть, что целевая функция всегда улучшается (в основном потому, что ).х я v я 0 , 1 , 2 , . , , , max { v i } k v i > k v i = v i - 1 | { x i } - { x j } | < 1vixivi0,1,2,...,max{vi}kvi>kvi=vi−1|{xi}−{xj}|<1
Теперь мы докажем, что среднее значение в группе по крайней мере равно среднему в группе плюс . Если это не так, просто пусть для всех , вычисление снова показывает, что целевая функция улучшается.к + 1 { х я } к 1 / 2 v я = v я - 1 V я > к{xi}k+1{xi}k1/2vi=vi−1vi>k
Поскольку среднее значение находится в диапазоне , в действительности существует не более двух групп, что соответствует версии floor / ceil.[ 0 , 1 ){xi}[0,1)