Stacking Boxes

http://acm.uva.es/p/v1/103.html
n次元の直方体を考えます(2次元なら長方形、1次元なら直線)。二つの直方体同士のサイズが決まっていれば、どちらかがどちらかを「収める」ことが可能か判定できます。さて、直方体を複数個与えられたとき入れ子にできる最も多重な組合せを求めるプログラムを書きなさいと。
「収める」ことの判定は簡単。辺の長さをすべての直方体についてソートしておき、同順位の辺がすべて片方の方が大きければ、大きい方に小さい方が収まります。問題はそこから。これは、推移則のある有向グラフにおける最長路を求めろという課題に等しいのです。
直方体の数は最大30個。ということはまたあれですよ、ビット演算を使えと教えてくれているようなモノ。自分を収めることのできる箱をビットとして立てて記憶。最初はすべての箱をレベル1とし、あるレベルの箱に収まることのできる箱を次のレベルに上げていきます。これは、各レベルにある箱をもやはりビットで表現して。
この方法で8ミリ秒で解けて一発Accept。やったね!