120タイトル:三角形、最小経路

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 )。
    } 
}

 

おすすめ

転載: www.cnblogs.com/xiaobaidashu/p/11887438.html