ダイナミックプログラミング:62異なるパス

62.異なる経路

件名の説明:

左コーナーMXNグリッドに位置ロボットは(以下、「スタート」と表示されたポイントのフィギュアを開始します)。

ロボットは右または下に一歩を移動することができます。(「完了」と表示され、次の図の)グリッドの右下隅に到達しようとしているロボット。

合計でQ.どのように多くの異なるパスがありますか?

 

問題解決のアイデア:

ダイナミックな3段階の計画:

1.配列要素に定義された意味、二次元配列SIG [m]を作成[N]

2配列間の関係を特定します。

次のことを想像して、マシンがどのように取得するために人々に顔である(i、j)は、この位置では?ロボットが歩い⾛または右⾛行くので、2つの⽅があることから式の到着は、

この位置に到達⼀降圧 - オン(1 I、J)である;一方は⾛⼀取る位置に到達するために、この工程(I-1、J)からのものです

[J] = DP [I-1] [i]は、すべての可能なを計算するステップは、それが一緒に⾛経路を移動するためのすべての方法が可能であり、関係はDPであるので、[J] + DP [I] [J -1]

初期値を3.検索。

DP [0] [0 ... .N -1] = 1; // ⼀が⾏⾯行、機械のみ⾛有することができ、残っている最表面に対応し、
DP [0 .... 1-M] [0] = 1。 // 唯一持っている左端の列の列⾯顔⼀に相当⾛マシンがダウンしています。

 

1  クラスソリューション{
 2  公共3      INT uniquePaths(INT M、INT N-) 
 。4      {
 5          // INT SIG [m]が[N-]; 
6。         / *   動的にメモリが解放されて考える、または漏れることが、2次元配列を作成します* / 
7          INTは ** = SIG 新しい新規 のint * [m]は、
 図8          のためのINT I = 0 ; I <M、I ++ 9          {
 10              SIG [I] = 新しい新しい INT [N-];
 11          }
 12は、 
13であります         以下のためにINT iが= 0 ; I <Mを、I ++ 14          {
 15              SIG [I] [ 0 ] = 1 ;
16          }
 17          のためにINT iは= 0 ; I <N I ++ 18          {
 19              SIG [ 0 ] [I] = 1 20          }
 21  
22          のためにINT iは= 1 ; I <M、I ++ 23              のためのINT J = 1; J <N; J ++ 24              {
 25                  SIG [I] [J] = SIG [I- 1 ] [J] + SIG [I]、[J- 1 ]。
26              }
 27          リターン SIG [M- 1 ] [N- 1 ]。
28      }
 29 }。

 

おすすめ

転載: www.cnblogs.com/Tavi/p/12555885.html