Это вопрос интервью, который получил мой друг, и я не могу придумать, как его решить.
Вопрос:
Вам предоставляется массив из n кнопок, которые либо красные, либо синие. Есть k контейнеров. Значение контейнера задается продуктом красных кнопок и синих кнопок, присутствующих в нем. Проблема состоит в том, чтобы поместить кнопки в контейнеры, чтобы сумма всех значений контейнеров была минимальной. Кроме того, все контейнеры должны содержать кнопки, и они должны быть приведены в порядок, чтобы они были указаны. Например, самая первая кнопка может перейти только к первому контейнеру, вторая - к первой или второй, но не к третьей (в противном случае второй контейнер не будет иметь никаких кнопок). k будет меньше или равно n.
Я думаю, для этого должно быть решение для динамического программирования.
Как вы решаете это? До сих пор у меня были только тривиальные случаи, когда
- if (n == k), ответ будет равен нулю, потому что вы можете просто поместить его в каждый контейнер, чтобы значение каждого контейнера было нулевым, поэтому сумма была бы равна нулю.
- if (k == 1), вы просто сбрасываете все из них и вычисляете продукт.
- Если присутствует только один цвет, ответ будет равен нулю.
Edit
Я приведу пример.
n = 4 и k = 2
Вход: R B R R
Первый контейнер получает первые два (R и B), составляющие его значение 1 (1R X 1B) Второй контейнер получает оставшиеся (R и R) значения 0 (2R x 0B) Ответ 1 + 0 = 1
если k = 3, первый контейнер будет иметь только первую кнопку (R) второй контейнер будет иметь только второй (B) у третьего были бы две последние кнопки (R и R) Каждый из контейнеров будет иметь значение 0 и, следовательно, сумма и ответ будут равны 0.
Надеюсь, это устранит сомнения.