У мене є кілька книг і книжкова полиця. Я хотів би покласти якомога більше книг на полицю, але я маю правило. Усі розміри книг (висота, ширина та глибина) повинні утворювати на полиці незростаючу послідовність.
Це означає, що кожна книжка повинна бути принаймні такою ж високою, як і книги після неї. Те саме стосується ширини та глибини. Не можна обертати книги, щоб поміняти їх висоту, ширину та глибину.
Ви повинні написати програму або функцію, яка задає розміри всіх книг як вихідних даних або повертає максимальну кількість книг, які я можу помістити на полицю.
Вхідні дані
- Список трійки натуральних чисел, де кожна трійка визначає висоту, ширину та глибину книги.
- У вхідному списку буде хоча б одна трійка.
- Дві книги можуть мати однакову довжину уздовж будь-якої кількості вимірів.
Вихідні дані
- Єдине додатне ціле число, максимальна кількість книг, що вміщуються на полиці, підкоряючись правилу.
Часова складність
Ваш алгоритм повинен мати найгірший часовий складний поліном у кількості книг. Це означає, що, наприклад, усі часові складності є дійсними: 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
Це кодовий гольф, тому найкоротший запис виграє.
Пов’язаний цікавий виклик щодо сортування книг : Сортування книг .