[ダイナミックプログラミング] 174ダンジョンゲームをleetcode

問題: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 
            } 
        } 
        戻り低いです。
    } 
}。

 

おすすめ

転載: www.cnblogs.com/fish1996/p/11331035.html