タイトル説明
ガラ学校の時間は、すべての学生が参加できるようにするために、ホストは、多くの場合、学生とゲームの花のドラムパスを再生します。ゲームのルールはこれです:nはクラスメートは、学生の開始後に花を保持するドラムが通過し始め、次のスタートドラミングあなたに戻って、花の花束を保持する学生を指定された、円形にホストが座っていました花は、各生徒が(右または左)に彼女の2クラスメートの周りに花を渡すことができ、ホストが大量の花が停止太鼓を停止するには、この時間は、学生が保持花は行かなかった来たということです私たちはあなたのパフォーマンスを提供します。
賢い少しゲームが興味深い質問提起:小さな手が後でm回通過し、花のゲームを渡すようになったどのように多くの異なる方法を作ることができますが、小さなゲームの手に戻りました。のみこれらの2つの方法ならば配達方法についてと、生徒はボールからなる配列によってシーケンスにかかった場合、別の花として扱わ渡す唯一の二つの方法は異なります。例えば、3人の学生1号、2号、3号と第1の小さな手レースウェイバック三回小さな、受粉と一致すると仮定されるがあり> 2-> 3-> 1 1-及び1-> 3 - > 2-> 1、二種類の合計。
エントリー
入力コモンライン、N 2スペースで区切られた整数、M(3 <= nである <= 30,1 <= M <= 30)
サンプル入力
33
輸出
出力コモンラインに適合することを意図した質問の数の整数表現が存在する
サンプル出力は、
2
アイデア1:動的計画
各学生は、彼らの約1自身(右または左)を渡された2人の学生を過ごすことができます。
学生は1,2,3,4,5 ...私... nは番号が付けと仮定すると、
フォワード思考:
-
- 0番目、1つの学生保持花、花を投げて開始する準備ができて。
- 第一、学生は花を受け取っOR 2人のn個の学生は花を受け取ります。
逆思考:
-
- まず学生には、n番目の花の最初の二つのクラスメートや学生を受け取ることができます。
- i番目の学生は、学生や生徒の花番目の第二(I + 1)番目の最初の(I-1)を受け取ることができます。
- 学生番目Nは、学生が同級生花番目第一又は第二の(N-1)を受信することができます。
要約:
-
- jへのi番目= I-1番目は(J-1)は、花に最初のi-1 + CI(jは+ 1)を取るために時間を費やします
- D [I] [J] = D [(1-I)] [(1-J)N-%] D + [(1-I)] [(J + 1)%のn-](のための良好な終了処理そのような環、具体的な設定配列に応じて調整取得する式その二つの要素の確立)
- DP [i] [j]は離れて最初のノードjは、すべてのメソッドのノード数に達したからiステップを表します
コード
インポートjava.util.Scanner; パブリック クラスメイン{ 公共 静的 ボイドメイン(文字列[]引数){ スキャナSCは = 新しい新しいスキャナ(System.in); int型のn-sc.nextInt =(); //は数表し INT M = SCを.nextInt(); //は、後工程の数を表し、 INT [] [] DP = 新しい新しい INT [N-] [第m + 1]; // DP [I] [j]は離れて最初のノード0からノードjへのI-ステップを表しますすべてのメソッド番号 DP [0] [0] = 1 ; のための(INT I = 1; I <= M、Iが++ ){ ため(INT J = 0; J <N-、J ++){ DP [I] [J] = DP [(I-1)] [(J-1 + N)%のN] + DP [(I-1)] [(J + 1個の+ N)%のN]。 } } のSystem.out.println(DP [M] [ 0 ])。 } }