J'ai quelques livres et une étagère. Je voudrais mettre autant de livres sur l'étagère que possible mais j'ai une règle. Toutes les dimensions des livres (hauteur, largeur et profondeur) doivent former une séquence non croissante sur l'étagère.
Cela signifie que chaque livre doit être au moins aussi élevé que ceux qui le suivent sur lui-même. Il en va de même pour la largeur et la profondeur. Vous ne pouvez pas faire pivoter les livres pour échanger leur hauteur, largeur et profondeur.
Vous devez écrire un programme ou une fonction qui donne les dimensions de tous les livres comme sorties d'entrée ou renvoie le nombre maximal de livres que je peux mettre sur l'étagère.
Contribution
- Une liste de triplets d'entiers positifs où chaque triplet définit la hauteur, la largeur et la profondeur d'un livre.
- Il y aura au moins un triplet dans la liste d'entrée.
- Deux livres peuvent avoir les mêmes longueurs selon un nombre quelconque de dimensions.
Production
- Un seul entier positif, le nombre maximal de livres qui tiennent sur l'étagère obéissant à la règle.
Complexité temporelle
Votre algorithme doit avoir un polynôme de complexité temporelle dans le pire des cas dans le nombre de livres. Cela signifie par exemple que les complexités temporelles suivantes sont toutes valides: O (N ^ 3), O (log (N) * N ^ 2), O (N) et les suivantes ne sont pas valides: O (2 ^ N), O (N!), O (N ^ N).
Exemples
Entrée => Sortie
(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
C'est le golf de code, donc l'entrée la plus courte gagne.
Un défi de tri de livres intéressant: le tri de piles de livres .