Mam trochę książek i półkę na książki. Chciałbym umieścić jak najwięcej książek na półce, ale mam pewną zasadę. Wszystkie wymiary książek (wysokość, szerokość i głębokość) powinny tworzyć nie rosnącą sekwencję na półce.
Oznacza to, że każda książka musi być co najmniej tak wysoka, jak ta po sobie. To samo dotyczy szerokości i głębokości. Nie można obracać książek w celu zamiany ich wysokości, szerokości i głębokości.
Powinieneś napisać program lub funkcję, która podając wymiary wszystkich książek jako dane wyjściowe lub zwraca maksymalną liczbę książek, jakie mogę umieścić na półce.
Wejście
- Lista trojaczków liczb całkowitych dodatnich, przy czym każda trojaczka określa wysokość, szerokość i głębokość książki.
- Na liście wejściowej będzie co najmniej jeden triplet.
- Dwie książki mogą mieć tę samą długość wzdłuż dowolnej liczby wymiarów.
Wynik
- Pojedyncza dodatnia liczba całkowita, maksymalna liczba książek, które mieszczą się na półce, przestrzegając reguły.
Złożoność czasowa
Algorytm powinien mieć wielomian złożoności w najgorszym przypadku w liczbie książek. Oznacza to, że na przykład wszystkie złożone zawirowania czasowe są prawidłowe: O (N ^ 3), O (log (N) * N ^ 2), O (N) i następujące są nieprawidłowe: O (2 ^ N), O (N!), O (N ^ N).
Przykłady
Dane wejściowe => Dane wyjściowe
(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
To jest golf golfowy, więc wygrywa najkrótszy wpis.
Powiązane interesujące wyzwanie związane z sortowaniem książek: Sortowanie książek .