У меня есть несколько книг и книжная полка. Я хотел бы положить на полку как можно больше книг, но у меня есть правило. Все размеры книг (высота, ширина и глубина) должны образовывать не увеличивающуюся последовательность на полке.
Это означает, что каждая книга должна быть по крайней мере такой же высокой, как и те, которые стоят за ней. То же самое касается ширины и глубины. Вы не можете вращать книги, чтобы поменять местами их высоту, ширину и глубину.
Вы должны написать программу или функцию, которая дает размеры всех книг в качестве входных данных или возвращает максимальное количество книг, которое я могу положить на полку.
вход
- Список триплетов натуральных чисел, где каждый триплет определяет высоту, ширину и глубину книги.
- В списке входов будет хотя бы один триплет.
- Две книги могут иметь одинаковую длину по любому количеству измерений.
Выход
- Одно положительное целое число, максимальное количество книг, которые помещаются на полке, подчиняясь правилу.
Сложность времени
Ваш алгоритм должен иметь полиномиальную сложность времени в худшем случае по количеству книг. Это означает, что, например, допустимы следующие временные сложности: O (N ^ 3), O (log (N) * N ^ 2), O (N) и следующие недопустимые: O (2 ^ N), O (N!), O (N ^ N).
Примеры
Вход => Выход
(1, 1, 1) => 1
(5, 2, 5), (1, 3, 5) => 1
(5, 2, 5), (1, 2, 5) => 2
(2, 2, 2), (2, 2, 2), (2, 2, 2), (1, 3, 6) => 3
(1, 2, 5), (1, 3, 5), (1, 2, 8), (1, 2, 5), (7, 7, 7) => 4
(5, 19, 3), (9, 4, 16), (15, 16, 13), (7, 4, 16), (1, 13, 14), (20, 1, 15), (9, 8, 19), (4, 11, 1) => 3
(1, 1, 18), (1, 13, 7), (14, 1, 17), (8, 15, 16), (18, 8, 12), (8, 8, 15), (10, 1, 14), (18, 4, 6), (10, 4, 11), (17, 14, 17), (7, 10, 10), (19, 16, 17), (13, 19, 2), (16, 8, 13), (14, 6, 12), (18, 12, 3) => 5
Это код гольф, поэтому выигрывает самый короткий вход.
Связанная интересная задача сортировки книг: Book Stack Sort .