問題:https://leetcode.com/problems/dungeon-game
タグは、私は半分の簡素化+ DP(血液のみの一定量に到達する必要ができます)やってますが、とてもゆっくり生きることができます費やしたこの質問をお読みください。コメントエリアを見ては、我々はすべての純粋なDPをオフにしていることがわかった、私は叫びました。
クラス解決{ パブリック: int型M、N。 BOOL CANSAVE(ベクトル<ベクトル< INT >>&ダンジョン、int型の寿命) { ベクトル <ベクトル< INT >>健康(M、ベクトル< INT >(N - 1 ))。 健康[ 0 ] [ 0 ] =生活+ダンジョン[ 0 ] [ 0 ]; 以下のために(int型私= 0 ; iが<M; iが++ ) { ため(INT J = 0 ; J <N; J ++ ) { 場合(I> 0 &&健康[I - 1 ] [J]> 0 ) { 健康[I] [J] =健康[I - 1 ] [J] + ダンジョン[I] [J]。 } であれば(J> 0 &&健康[I]、[J - 1 ]> 0 ) { 健康[I] [J] = MAX(健康[I]、[J]、健康[I]、[J - 1 ] + ダンジョン[ I] [J]); } } } 戻り健康[M - 1 ] [N - 1]> 0 。 } INT calculateMinimumHP(ベクトル<ベクトル< INT >>&ダンジョン){ M = dungeon.size()。 もし(!m)のリターン 0 ; N =ダンジョン[ 0 ] .size()。 int型高= 1 ; int型の低= 1 ; 以下のために(int型 i = 0 ; iがm <; iは++ ) { ための(int型 J = 0 ; J <nであり、j ++ ) { もし(ダンジョン[I] [J] < 0 ) { ハイ + = - ダンジョン[I] [J]。 } } } 一方(低< 高) { int型ミッド=ロー+(高-低)/ 2 。 もし(CANSAVE(ダンジョン、MID)) { 高 = ミッド。 } 他 { 低い =ミッド+ 1 。 } } 戻り低いです。 } }。