Ctrl K

Брать с краёв с весами

Сложная
Даны массив values длины n и массив весов weights длины m, причём m ≤ n. Счёт сначала равен нулю. Нужно сделать ровно m ходов. На ходе номер k (с нуля) вы забираете из values либо первый, либо последний элемент x — он удаляется из массива — и прибавляете к счёту weights[k] · x. Верните наибольший счёт, который можно получить после всех m ходов.
Пример 1
values=[4, -2, 5], weights=[2, -1] → 12

Сначала берём 5 справа с весом 2 (+10), затем -2 справа с весом -1 (+2): итого 12.

Пример 2
values=[-3, 1, 1, -3], weights=[-1, -1] → 6

Оба отрицательных числа, умноженные на -1, дают по +3: берём -3 слева и -3 справа, итого 6.

Пример 3
values=[7, 1, 2], weights=[3] → 21

Ход один: 7 слева с весом 3 даёт 21, а 2 справа — только 6.

Ограничения
  • 1 ≤ m = weights.length ≤ 300
  • m ≤ n = values.length ≤ 10⁵
  • -1000 ≤ values[i], weights[i] ≤ 1000
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиВода между стенами СложнаяСамый большой горящий блок СложнаяПрибыль за две сделки СложнаяВсе способы расставить пробелы СложнаяПереход через пещеру Сложная
загружаем Python…
Вход
values=[4, -2, 5], weights=[2, -1]
Ожидается
12

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 119 тестов на сервере, включая скрытые.