コグ49 Vaultの問題DFS DP

49.問題ボールト

★入力ファイル:horse.in   出力ファイル:horse.out   の単純な比較
制限時間:1秒メモリ制限:128メガバイト

[問題の説明]

    右下隅にジャンプし始めの半分シートのボードの左上隅にある「馬」の中国のチェスがあります。引当金は、唯一の(左にジャンプ、上で利用可能低くなることではなく)右にジャンプすることができます。プログラムの異なる要求の数は、エンドポイントB(M、N)の合計に始点A(1,1)からジャンプ。

 
 [入力形式]
 
    入力ファイルのみ一行二整数m及びn(1≤m、n≤20)は、二つの数値の間にスペースがあります。
 [出力形式]
 
    唯一の整数出力ファイル、すなわち、AからBへのすべての移動
 
 [O]サンプル
 
   入力ファイル(horse.in)
   5 9
 
  出力ファイル(horse.out)
   37  
     
まあこれは本当に問題ああ風水風水です
 
私は、DFSを行う必要はありません
動的計画法とそれを試してみてください!
実際には、まだ比較的簡単に見えます
- F [i] [j]はF [I = [J - 2] 1] + F [I - 2] [J + 1] + F [I - 1] [J - 2] + Fを[I - 1] [J + 2]。
そして、i、jはループのための大規模な列挙に小さなからです
実際には、それは、上から下へ、左から右へ、です
正確性については?良い証拠。
しかし、本当にあまりにもカードえっQAQ 
約4ポイント以上
 
質問実際にはかなり激しいチューンアップ正直に言うと、
#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
INT F [ 1005 ] [ 1005 ]。
INT メイン()
{ 
    freopenは(" horse.in "" R " 、STDIN)。
    freopenは(" horse.out "" W " 、STDOUT)。
    INTのN、M。
    scanf関数(" %d個の%のD "、&​​N、&M)。
    F [ 1 ] [ 1 ] = 1 以下のためのint型iは= 2 ; I <= M; I ++ のためのINT J = 1 ; J <= N; J ++ 
            F [i]は[J] = F [I- 2 ] [J- 1 ] + F [I- 2 ] [J + 1 ] + F [I- 1 ] [J- 2 ] + F [I- 1 ] [j + 2 ]。
    printf(" %dの" F、[M] [N])。
    
    リターン 0 ; 
}

 

 
 
 

おすすめ

転載: www.cnblogs.com/Tidoblogs/p/11469885.html