Я столкнулся с этим вопросом в интервью и не мог понять. Я считаю, что у него есть решение динамического программирования, но оно ускользает от меня.
Учитывая количество кирпичей, выведите общее количество двумерных пирамид, где пирамида определена как любая структура, где ряд кирпичей имеет строго меньше кирпичей, чем строка ниже. Вам не нужно использовать все кирпичи.
Кирпич - это просто квадрат, количество кирпичей в строке - это единственный важный бит информации.
Действительно, застрял в этом, я думал, что легко решить каждую проблему 1... итеративно и суммировать. Но придумать количество пирамид, которые возможны с помощью i-го кирпича, уклоняется от меня.
пример, n = 6
X
XX
X
XX XXX
X
XXX XXXX
XX X
XXX XXXX XXXXX
X
XX XX X
XXX XXXX XXXXX XXXXXX
Итак, ответ - это 13 возможных пирамид из 6 кирпичей.
изменить
Я уверен, что это проблема динамического программирования, потому что имеет смысл (как только вы определили первую строку) просто посмотрите на индекс в своем запоминаемом массиве оставшейся части кирпичей, чтобы увидеть, сколько пирамид подходит к вершине.
Также имеет смысл рассматривать нижние строки шириной не менее n/2, потому что мы не можем иметь больше кирпичей поверх, чем в нижней строке EXCEPT, и это то, где я его теряю, и мой разум разваливается, в некоторых (немногих случаях) вы можете N = 10
X
XX
XXX
XXXX
Теперь нижняя строка имеет 4, но осталось 6 слева.
Но при n = 11 мы не можем иметь нижнюю строку с менее чем n/2 кирпичами. Существует еще одна странная несогласованность с n = 4, где мы не можем иметь нижний ряд n/2 = 2 кирпичей.