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 ; }