Учитывая 2 массива неотрицательных чисел, найдите минимальную сумму произведений

даны два массива A и B, содержащих n неотрицательные числа, удалить a>0 элементы с конца A и b>0 элементы с конца B. оцените стоимость такой операции, как X*Y здесь X - сумма a элементы удалены от A и Y в сумме b элементы удалены от B. Продолжайте делать это, пока оба массива пусты. Цель состоит в минимизации общей стоимости.

С помощью динамической программирование и тот факт, что оптимальная стратегия всегда будет иметь ровно один элемент либо A или B Я могу найти решение O(n^3). Теперь мне интересно узнать, есть ли еще более быстрое решение этой проблемы?

EDIT: Кража примера из @recursive в комментариях:

A = [1,9,1] и B = [1, 9, 1]. Возможно сделать со стоимостью 20. (1) * (1 + 9) + (9 + 1) * (1)

1 ответов


здесь O(n^2). Пусть CostA(i, j) минимальная стоимость устранения A[1..i], B[1..j] таким образом, что первое удаление занимает только один элемент B. Пусть CostB(i, j) минимальная стоимость устранения A[1..i], B[1..j] таким образом, что первое удаление занимает только один элемент A. У нас есть взаимно рекурсивные повторы

CostA(i, j) = A[i] * B[j] + min(CostA(i - 1, j),
                                CostA(i - 1, j - 1),
                                CostB(i - 1, j - 1))
CostB(i, j) = A[i] * B[j] + min(CostB(i, j - 1),
                                CostA(i - 1, j - 1),
                                CostB(i - 1, j - 1))

с базовыми корпусами

CostA(0, 0) = 0
CostA(>0, 0) = infinity
CostA(0, >0) = infinity
CostB(0, 0) = 0
CostB(>0, 0) = infinity
CostB(0, >0) = infinity.

ответ min(CostA(n, n), CostB(n, n)).