A. 問題の説明
三角形を考えると、最小値とトップダウンパスを見つけます。各ステップは、次の行の隣接ノードへ移動することができます。
例えば、三角形を与え:
[
[2]
[3,4]
[6,5,7]
[4,1,8,3]
]
トップダウンと最小経路11(すなわち、2 + 3 + 5 + 1 = 11)。
説明:
あなたはこの問題を解決する唯一のO(n)の余分なスペース(nは三角形のように行数)を使用することができます場合は、あなたのアルゴリズムはプラスになります。
II。問題解決のためのアイデア
アイデアのボディ:それを解決するために、ボトムアップの動的プログラミングアルゴリズムを使用します。状態遷移関数を検索します。Nが最大値の最後の行からn行目で、iがi番目の行です。
F(N)(I)= F(N)(I)+分(F(N + 1)は、(i)、F(N + 1)は、(i + 1))
ステップ:状態遷移方程式を、我々は最後の行からカウントすることができ、すべての値が、その代わりにラインの各ラインで得られました。
ステップ2:手順を繰り返し、最初の行が新しい値で交換されるまで、新しい出力値は、要求の値です。
III。結果
実行時:7ミリ秒は、Javaの提出内のすべてのユーザーの27.06パーセントを打ちます
メモリ消費量:37.2メガバイトには、Javaの提出内のすべてのユーザーの77.58パーセントを破りました
IV。Javaコード
クラスのソリューション{ 公共 のint minimumTotal(一覧<一覧<整数>> 三角形){ 場合(triangle.size()== 0 ){ リターン 0 ; } のための(INT I = triangle.size() - 2; I> = 0; i-- ){ リスト <整数>リスト= 新規のArrayList <整数> (triangle.get(I))。 用(INT ; J <はlist.size(); J = 0 J ++ ){ int型の TEMP = list.get(J)+ Math.min(triangle.get(I + 1)に.get(J)、triangle.get( I + 1)に.get(J + 1 )); list.set(J、温度); } triangle.set(I、リスト)。 } 戻り triangle.get(0)に.get(0 )。 } }