Чтобы лучше представить эту проблему,
- Пусть
A
- матрица прибыли, где A[c]
- массив прибыли для города c
(c = 0
для первого города, c = 1
для второго и т. д.). - Пусть
P(i, c)
будет оптимальной прибылью вплоть до дня * 1012 включительно, так что движущаяся компания окажется в городе c
в день i
. - Пусть
C(c', c)
- это стоимость переезда из города c'
в город c
.
Эта установка позволяет нам обобщить решение для произвольного числа городов.
Чтобы максимизировать P(i, c)
, мы должны рассмотреть все возможные города, которые могут быть использованы грузчиками. в предыдущий день i-1
и выберите максимальный вариант. Эти возможности включают перевозчиков, которые находились в том же городе в предыдущий день, и переезжали из другого города в предыдущий день, в то же время оплачивая транспортные расходы. Следовательно,
P(i, c) = max(P(i-1, c), max(P(i-1, c') + C(c', c) for all cities c' != c)) + A[c][i]
Первый аргумент во внешнем max
(P(i-1, c)
) рассматривает случай, когда грузчики были в том же городе в предыдущий день, и второй аргумент (внутренний max
). ) оценивает и максимизирует прибыль (включая транспортные расходы), если грузчики были в другом городе в предыдущий день.
Окончательный ответ - просто max(P(n, x) for all cities x)
, где n
- последний день (учитывая все возможные города, в которых могут оказаться грузчики в последний день).
В вашем примере, город A == город 0, город B == город 1, матрица прибыли A = [[10, 20, 30], [-10, 50, 20]]
и C(0, 1) = C(1, 0) = 20
.
РЕДАКТИРОВАТЬ:
Сложность времени будет O(nc)
, где n
- количество дней, а c
- количество городов. Если число городов фиксировано, то временная сложность составляет O(n)
.
Доказательство правильности может быть сделано с помощью индукции. Предположим, что P(i-1, x)
является максимальным для всех городов x
. Затем покажите, что P(i, c)
для некоторого города c
, как определено выше, является максимальным. Существует два варианта максимального решения:
- Грузчики были в одном городе
c
в день i-1
- Грузчики были в другом городе
c'
на день i-1
.
Теперь все, что вам нужно показать, это то, что повторение, определенное выше, даст вам правильное решение в обоих этих случаях.