Это вопрос интервью, который получил мой друг, и я не могу придумать, как его решить.Разделите массив в порядке
Вопрос:
Вам дано массив из п кнопок, которые либо красным или синим. Есть k контейнеров. Значение контейнера задается продуктом красных кнопок и синих кнопок, присутствующих в нем. Проблема состоит в том, чтобы поместить кнопки в контейнеры, чтобы сумма всех значений контейнеров была минимальной. Кроме того, все контейнеры должны содержать кнопки, и они должны быть приведены в порядок, чтобы они были указаны. Например, самая первая кнопка может переходить только к первому контейнеру, вторая - к первой или второй, но не к третьей (в противном случае второй контейнер не будет иметь никаких кнопок). k будет меньше или равно n.
Я думаю, для этого должно быть решение для динамического программирования.
Как вы это решаете? До сих пор я получил только тривиальные случаи, когда
- если (п == к), то ответ будет равен нулю, потому что вы можете просто положить один в каждом контейнере делает значение каждого контейнера нулевой, поэтому сумма будет равна нулю.
- if (k == 1), вы просто сбрасываете все и вычисляете продукт.
- Если присутствует только один цвет, ответ будет равен нулю.
Edit:
Я приведу пример.
п = 4 и к = 2
Входной сигнал: RBRR
Первый контейнер получает первые два (R и B), что делает его значение 1 (1R Х 1B) Второй контейнер получает оставшиеся (R и R), что делает его значение 0 (2R х 0B) ответ 1 + 0 = 1
если к = 3, первый контейнер будет иметь только первую кнопку (R) второй контейнер будет имеют только второй (B) , третий имеют две последние кнопки (R и R). Каждый из контейнеров будет иметь значение 0, и поэтому сумма и ответ будут равны 0.
Надеюсь, что это прояснит сомнения.
Если 'n >> k', и мы находимся на этапе' k + 1', и все контейнеры содержат ровно одну кнопку до сих пор, может ли кнопка k + 1 перейти в любой контейнер? Я не понимаю, почему вы не можете поместить вторую кнопку в третий контейнер. Если у вас достаточно кнопок, вы можете пополнить второй контейнер позже. – IVlad
Прошу прощения, но ваш пример только меня смущает. Почему бы вам сначала не положить первый «r» в первый контейнер, второй «b» во второй контейнер и следующие два «r» в первый контейнер, получив сумму '0'? – IVlad
@IVlad: Кнопки должны быть помещены в том порядке, в котором они указаны. Это означает, что первые i кнопки входят в первый контейнер, а следующие j - во второй, следующие k - в третий и т. Д. – Coder25