動的計画法(3)-カエルが階段をジャンプする

カエルのジャンプ

  • 質問:nステップにジャンプする方法の数(1、2、... nは毎回ジャンプできます)

  • ステータス:F(i); iレベルのステップにジャンプする方法の数

  • 伝達方程式;

    1. 子供の頃から大きなものへ:(レベル1:1タイプ)(レベル2:2タイプ)(レベル3:4タイプ)(レベル4:8タイプ)

      1级:{1}
      2级:{1,1} {2}
      3级:{1,1,1} {1,2} {2,1}  {3}
      4级:{1,1,1,1}{1,1,2}{2,2}{1,2,1}{1,3}{2,1,1}{3,1}{4}
      
    2. F(i):F(4)= F(1)+ F(2)+ F(3)+ 1 = F(3)+ F(3)= 2F(3);

    3. F(i):F(i-1)+ F(i-2)+…+ F(1)+1;

    4. F(i-1):F(i-2)+ F(i-3)+ F(i-1)+…+ 1

    5. F(i)= 2 * F(i-1);

  • 初期状態F(1)= 1;

//第一种写法,递归
public class Solution {
    
    
    public int JumpFloorII(int target) {
    
    
        if(target == 0)return 0;
        if(target == 1)return 1;
        int res = 2*JumpFloorII(target-1);
        return res;
    }
}
//第二种,for循环
public class Solution {
    
    
    public int JumpFloorII(int target) {
    
    
        if(target == 0)return 0;
                int res = 1;
         for(int i = 2;i <= target;i++){
    
    
             res *= 2;
         }
        return res;
    }
}

2.単純なカエルが階段をジャンプする

  • 質問、nステップにジャンプする方法の数(毎回1つまたは2つのステップのみをスキップできます)
  • ステータス:F(i); iレベルのステップにジャンプする方法の数
  • 状態遷移方程式
  1. ステップは1つだけです:1つのタイプ、1つだけジャンプできます
  2. 2つのステップがあります:2つのタイプ、一度に2つのステップをスキップするか、一度に1つのステップをスキップすることができます
  3. 3つのステップがあります:3つのタイプ、各ジャンプに1つ、最初に1つ、最初に2つ、最初に2つ、
  4. i個のステップがあります:F(i)= F(i-1)+ F(i-2);
  • 初期状態:F(1)= 1; F(2)= 2;
public class Solution {
    
    
    public int JumpFloor(int target) {
    
    
        if(target == 1)return 1;
        if(target == 2)return 2;
        return JumpFloor(target-1)+JumpFloor(target-2);
    }
}

おすすめ

転載: blog.csdn.net/qq_45665172/article/details/111167306