ダイナミックプログラミング(再帰的な)問題解決の手順:
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]コードを通報