3

私は先週このタスクを取得しましたが、問題を解決するための適切なアルゴリズムを見つけることができません。だからここに説明があります:

大きな立方体を小さな立方体に配置せず、硬い立方体を軽い立方体に配置しない場合は、立方体を構築して安定したタワーを構築できます。n個の立方体を持つ可能な限り最高の塔を与えるプログラムを作成します。
入力:
in.txtの最初の行には、キューブの数n(1 = <n = <1000)があります。次のn行は、2つの正の整数、立方体の辺の長さと重さ(どちらも2000以下)で構成されています。辺の長さと重量が同じである類似の立方体はありません
。出力:
可能な限り高い安定したタワーのm番号をout.txtに書き込む必要があります。2行目には、塔の序数mを下から上に書き込む必要があります。塔の高さは、立方体のすべての側面の長さを意味します(立方体の数ではありません)。複数の解決策がある場合は
、入力と出力の例を指定できます。
入力:
5
10 3
20 5
15 6
15 1
10 2 および
出力:
3 215ここにプログラムの制限があります。制限時間:0.2秒 メモリ制限:16 Mb

私がこれを解決するのを手伝ってくれることを願っています。すべての助けのためのthx

4

1 に答える 1

5

「ブロックAはブロックBの上に配置できる」という関係は、ブロックの半順序を定義します。カーンのアルゴリズム(別名「トポロジカル ソート」) を使用して、これを全体の順序に変換し、これを詳細な順序でトラバースして、最長パスを見つけることができます。

于 2010-11-25T19:28:33.723 に答える