異なるパスのNUM 62 NUM 63の異なるパス&& ||
二つの質問は、動的計画法に基づいている、常に可能な問題に注意を求めていることはノード合計に思われます
データ範囲は、100×100であるが、爆発intの結果である可能性があり、長い発現が
複数のフィルタ条件の障壁があります。
コードは以下の通りです
クラス解決{ パブリック: int型 uniquePaths(INT M、INT N){ int型の DP [ 105 ] [ 105 ]。 memsetの(DP、0、はsizeof (DP))。 DP [ 1 ] [ 1 ] = 1 。 以下のために(INT iが= 1 ; I <; = M I ++ ) { ため(INT J = 1 ; J <= N J ++ ) { 場合(I> = 2 = && J>2 ) DP [I] [J] = DP [I- 1 ] [J] + DP [I]、[J- 1 ]。 そう であれば(I> = 2 ) DP [I] [J] = DP [I- 1 ] [J]。 そう であれば(j> = 2 ) DP [I] [J] = DP [I]、[J- 1 ]。 // coutの<< "私: "<< I <<" J: "<< J <<" DP [I] [J]:" << DP [I] [J] <<てendl; } } 戻りDP [M] [N]。 } }。
クラス解決{ パブリック: int型 uniquePathsWithObstacles(ベクトル<ベクトル< INT >>&obstacleGrid){ int型、M = obstacleGrid.size()。 INT、N = obstacleGrid [ 0 ] .size()。 もし(obstacleGrid [M- 1 ] [N- 1 ] == 1)戻り 0 ; 長い DP [ 105 ] [ 105 ]。 memsetの(DP、0、はsizeof (DP))。 DP [ 1 ] [ 1 ] =1 ; 以下のために(INT iは= 1 ; I <= M; I ++ ) { ため(INT J = 1 ; J <= nであり、j ++ ) { 場合(I == 1 && J == 1 ) 続けます。 もし(obstacleGrid [I- 1 ] [J- 1 ] == 1 ) { DP [I] [J] = - 1 。 続け; } もし(I> = 2&& J> = 2 && obstacleGrid [I- 2 ] [J- 1 ]!= 1 && obstacleGrid [I- 1 ] [J- 2 ]!= 1 ) { DP [I] [J] = DP [I- 1 ] [J] + DP [I]、[J- 1 ]。 } そう なら(I> = 2 && obstacleGrid [I- 2 ] [J- 1 ] =!1 ) { DP [I] [J] = DP [I- 1 ] [J]。 } それ以外の 場合(J> = 2&& obstacleGrid [I- 1 ] [J- 2!] = 1 ) { DP [I] [J] = DP [I]、[J- 1 ]。 } } } 戻りDP [M] [N]。 } }。