ロボットの動きの範囲が提供66.バックトラック法を受賞します

タイトル説明

接地グリッドと、m行n列。グリッドからロボットが移動、右、左だけ毎回0,0座標上下四方セルが、グリッドの行および列の座標を入力することができないビットkの数の合計よりも大きいです。kが18である場合、例えば、ロボットが3 + 3 + 5 + 7 = 18から、ボックス(35、37)を入力することができます。3 + 3 + 5 + 8 = 19しかし、それは、ボックス(35、38)を入力することができません。ロボットは、格子の数に到達することができるだろうか?
 

問題解決のためのアイデア

 

动态规划 dp[i][j]表示是否可以到达,统计数字中 true 的个数,即为可以到达的格子数
 

コードは以下の通りです

公共 INT movingCount(INT閾値、INT行、INT colsの)
    { 
        場合(閾値<0 戻り 0 ;
        ブール [] [] DP = 新しい ブール [行+ 1] [COLS + 1 ]。
        DP [ 0] [0] = 以下のためにint型 I 1 =;私は=行を<; Iは++){ // 初始化
            場合(DP [I-1] [0] && canreach(閾値、I、0 )){ 
                DP [I] [ 0] = 
            }  {
                DP [I] [ 0] = 
            } 
        } 
        のためにint型 {; iが<= COLS I ++はI = 1)// 初始化
            場合(DP [0] [I-1] && canreach(しきい値、0 、I)){ 
                DP [ 0] [I] = ; 
            } { 
                DP [ 0] [I] = 
            } 
        } 
        のためにint型、iは=行を<; I = 1 iは++ ){
             ためint型の J = 1; J <= COLS; J ++ ){
                 もし((DP [I-1]〜[J] && canreach(閾値、I、J))||(DP [I]、[J-1] && canreach(閾値、I、J))){ 
                    DP [I] [J ] = 
                } { 
                    DP [I] [j]は = 
                } 
            } 
        } 
        int型のカウント= 0 ;
        以下のためにint型 I 0 =; iが行を<; Iは++ ){
             ためINT J = 0; J <COLS; J ++ ){
                 場合(DP [I] [J])
                    カウント ++ 
            } 
        }      
    戻り値の数。      
    } 
     パブリック  ブール canreach(INTの閾値、int型のx、int型のY){
             int型の和= 0 一方、(X> 0 ){ 
                合計 10 + = X% 
                X / = 10 
            } 
            一方、(Y> 0 ){ 
                合計 + = Y%10 
                Y / = 10 
            } 
            戻り値の和<= 閾値。
        }

 

 

おすすめ

転載: www.cnblogs.com/Transkai/p/11423951.html