本と本棚があります。できるだけ多くの本を棚に置きたいのですが、ルールがあります。ブックのすべての寸法(高さ、幅、深さ)は、シェルフ上で増加しないシーケンスを形成する必要があります。
これは、すべての本が少なくともそれ以降の本と同じ高さでなければならないことを意味します。同じことが幅と深さについても言えます。本を回転して高さ、幅、奥行きを入れ替えることはできません。
すべての書籍の寸法を入力出力として指定するか、棚に置くことができる書籍の最大数を返すプログラムまたは関数を作成する必要があります。
入力
- 正の整数のトリプレットのリスト。各トリプレットは本の高さ、幅、深さを定義します。
- 入力リストには少なくとも1つのトリプレットがあります。
- 2冊の本は、任意の数の次元に沿って同じ長さを持つことができます。
出力
- 単一の正の整数、ルールに従って棚に収まる本の最大数。
時間の複雑さ
アルゴリズムには、書籍の数が最悪の場合の時間複雑度多項式が必要です。これは、たとえば、次の時間計算量がすべて有効であることを意味します: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。