524.1
分かるけど、できない。できなきゃ意味ない...。
500
見てない。
1000
1x1x1のキューブが詰んである。二つの方向から見たときの形状が与えられるので、可能な配置は何通りあるか答えよ、という問題。
DPするだけ...。ある方向から見たときの形状は、ソートしても全体の配置の可能性については影響しない。後は大きい方から決定していく。一番高いものが一つの方向からしか見えない場合のみ不自然なことが起きていて、それ以外では実現可能。
一番大きい値が出てくる場所を調べると、矩形領域のどこかに出現しないといけないことが分かる。なので、各行各列に一度は出現するようなパターンをDPしてやれば全列挙できる。次の値にいくと、同様の矩形領域が得られるが、一つ前の矩形領域を内包しているので、その分除去してやらないといけない。つまりそれによって既により高いものが存在するため、任意の高さにして良い行や列が存在する。この部分を適当に処理しつつ、同様のDPをしてやれば良い。最終的に積算すれば全通り列挙される。