Я пытаюсь решить следующую задачу DP:Lego блоки - Динамическое программирование
У вас есть 4 типа лего блоков, размеров 1 * 1 * 1, 1 * 1 * 2, 1 * 1 * 3 и 1 * 1 * 4. Предположим, что у вас есть бесконечное количество блоков каждого типа.
Вы хотите сделать стену высотой H и шириной M из этих блоков. На стене не должно быть отверстий. Стена, которую вы строите, должна быть одной сплошной структурой. Твердая структура означает, что не должно быть можно отделить стену вдоль любой вертикальной линии без резки любой блок lego, используемый для сборки стены. Блоки могут размещаться только по горизонтали . Сколько способов построить стену?
Вот как я пытаюсь это: Представляя 1 * 1 * 1, 1 * 1 * 2, 1 * 1 * 3 и 1 * 1 * 4 блоки с A B C D . Допустимые шаблоны выделены жирным шрифтом. Недопустимые шаблоны, которые могут быть разбиты по вертикальной линии.
Н = 1 & W = 3 #valid узор = 1
аа аб ба сН = 2 & W = 3 #valid узор = 9
Я пытаюсь найти шаблон повторения, чтобы увеличить его по высоте или ширине. Найти значения для H = 3 & W = 3 или H = 2 & W = 4.
Любые входные данные о том, как увеличить формулу для роста по высоте или весу?
P.S. Стена всегда H * W * 1.
Разъяснения: стена является 'М * Н * 1 'блоком или' М * Н * инф 'block? Я предполагаю, что первое (так что количество шаблонов конечно), но тогда я не вижу, как работает ваша нотация шаблонов. Единственный допустимый шаблон для 1x3 - 'c', а не' b'. –
Лучшее, что я могу придумать, это цепь марков с состояниями «O (4^H)». Это не хорошо (или не так ли?). –
Это больше похоже на проблему загрузки поддона, которая является NP-Complete. Я не думаю, что мы найдем точное решение в полиномиальное время. – AndyG