Эта проблема становится намного легче, если вы сделаете небольшой умственный сдвиг.Вместо того, чтобы думать об этом как об индексе, умноженном на текущее значение, думайте об этом, как я беру сумму того, что осталось, затем удаляю одно значение.Таким образом, взяв {1,2,3,4,1,2,3,4,1}
и взяв числа только слева, вы получите
(1+2+3+4+1+2+3+4+1) +
( 2+3+4+1+2+3+4+1) +
( 3+4+1+2+3+4+1) +
( 4+1+2+3+4+1) +
( 1+2+3+4+1) +
( 2+3+4+1) +
( 3+4+1) +
( 4+1) +
( 1)
И поочередно даст вам:
(1+2+3+4+1+2+3+4+1) +
( 2+3+4+1+2+3+4+1) +
( 2+3+4+1+2+3+4 ) +
( 3+4+1+2+3+4 ) +
( 4+1+2+3 ) +
( 4+1+2 ) +
( 1+2 ) +
( 1 )
Ваше оптимальное решение становится:
1x1+1x2+2x3+3x4+4x5+1x6+2x7+3x8+4x9
(1+2+3+4+1+2+3+4+1) +
( 2+3+4+1+2+3+4+1) +
( 2+3+4+1+2+3+4 ) +
( 3+4+1+2+3+4 ) +
( 4+1+2+3+4 ) +
( 1+2+3+4 ) +
( 2+3+4 ) +
( 3+4 ) +
( 4 )
И т. Д.
Нетрудно убедиться, что это дает тот же ответ.Но с помощью этого переключателя мы теперь рекурсивно решаем исходную задачу для подмассива оригинала.Что значительно упрощает концептуальное решение для динамического программирования.И когда у вас есть концептуальное решение, код может следовать.