7.再帰やサイクル

ダイナミックプログラミング(再帰的な)問題解決の手順:

  1.元の問題は、サブ問題に分割されます。

  2.確認状態。

  3.境界条件(初期条件)を確認してください。

  前記状態遷移方程式。

 

タイトル:[フィボナッチ数]

我々は、すべての今、フィボナッチ数、および整数を入力するように要求することを知っnは、あなたのアイテムの出力n番目のフィボナッチ数フィボナッチ数列(0から、最初の0は0です)。N <= 39

分析:フィボナッチ数:{0112358132144 ......}

  F(0)= 0

  F(1)= 1

  F(2)= F(1)+ F(0)

  F(3)= F(2)+ F(1)

  ...

  F(N)= F(N-1)+ F(N-2)

1つの パブリック クラス溶液{
 2      // 递归O(N ^ 2)
3      公共 のintフィボナッチ(int型N){
 4          であれば(N == 0 || N == 1)リターン N 5          リターンフィボナッチ(N-1)+フィボナッチ(N-2 )。
6      }
 7 }

 

1  パブリック クラスソリューション{
 2      // ループO(N)
3。     公的 INTフィボナッチ(INT N-){
 4。         IF(N-N - == == 0 || 1)戻りN-;
 5          INTまず= 1 ;
 6。         int型 SECOND = 0 ;
 7          のためのINT ; I <= N-I ++ I = 2 {)
 。8              まず=最初+ SECOND; // F.(N)= F(1 N--)+ F(N - 2)
9。              SECOND =最初- SECOND ; // (1-N-)F. = F(N-)-F(N - 2)次のサイクルが使用されている
10          }
 11         返す最初;
12      }
 13 }

 

 

質問2:[ジャンプ]ステップ

カエルは、クラス1レベルにジャンプすることができ、あなたはまた、レベル2に飛び乗っすることができます。カエルはどのように多くのジャンプ(別の計算異なる結果の順序)は、n級レベルの合計を求めて飛び込みました。

分析:N = 1、唯一のジャンプ。

   n = 2の場合、1 + 1及び図2に示すように、ジャンプの二種類。

   n = 3の場合、前回ときのみ第2のステップジャンプのジャンプ - ジャンプ、ジャンプ初めての場合、方法ステップのみホップ - 2ホップ(ジャンプそうであれば繰り返し)最初のケースを多重化。

   一つだけジャンプするとき、N = N、N-1番目のステップの際に最後にスキップ - ジャンプ、とき最後のステップへジャンプN-2番目の1ホップ方式 - 2つのホップ。

   フィボナッチ数です!

   [A]コードを通報

   

質問3:[レベル]ジャンプ変態

カエルは、クラス1レベルにジャンプすることができます。また、レベル2に飛び乗っすることができます...... nはまた、ステージの上にジャンプすることができます。カエルはどのように多くのジャンプのn級レベルの合計を求めて飛び込みました

分析:場合N = N、また、前のn-1法、最後スキップN-2、...、最後にスキップN = 1、Aのみへのジャンプがあるとき種;

   F(N)= F(N-1)+ F(N-2)+ F(N-3)+ ... + F(1)

   F(N-1)= F(N-2)+ F(N-3)+ F(N-4)+ ... + F(1)

   => F(N)-F(N-1)= F(N-1)=> F(N)= 2 * F(N-1)

1つの パブリック クラスソリューション{
 2      公共 INT JumpFloorII(int型のターゲット){
 3          であれば(目標== 0 ||ターゲット== 1)戻りターゲット;
4          INT RES = 1 5          のためのINT ; I <=ターゲットI ++ iは2 = {)
 6              RES = RES * 2 7          }
 8つの         戻りRES。
9      }
 10 }

 

 

質問4:長方形のフットプリント[]

私たちは、大きな長方形をカバーするために、小さな長方形の2つの* 1横または縦を使用することができます。nは2 * 1カバレッジの小さな長方形は、大きな長方形の2 * nは、どのように多くの方法の合計重ならないだろうか?

 

  F(N)= F(N-1)+ F(N-2)=>フィボナッチ数

 [A]コードを通報

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/qmillet/p/12021108.html