zoukankan      html  css  js  c++  java
  • 递归--算法提高-超级玛丽

    问题描述
      大家都知道"超级玛丽"是一个很善于跳跃的探险家,他的拿手好戏是跳跃,但它一次只能向前跳一步或两步。有一次,他要经过一条长为n的羊肠小道,小道中有m个陷阱,这些陷阱都位于整数位置,分别是a1,a2,....am,陷入其中则必死无疑。显然,如果有两个挨着的陷阱,则玛丽是无论如何也跳过不去的。
      现在给出小道的长度n,陷阱的个数及位置。求出玛丽从位置1开始,有多少种跳跃方法能到达胜利的彼岸(到达位置n)。
    输入格式
      第一行为两个整数n,m
      第二行为m个整数,表示陷阱的位置
    输出格式
      一个整数。表示玛丽跳到n的方案数
    样例输入
    4 1
    2
    样例输出
    1
    数据规模和约定
      40>=n>=3,m>=1
      n>m;
      陷阱不会位于1及n上

    有问题的代码

    #include <iostream>
    #include <cmath>
    using namespace std;
    int n;
    int a[100];
    int b[100];
    int ans=0;
    void dfs(int i)
    {
      if(b[i]!=1)
    { 
       if(i==n||i==n-1){
            ans++;
        }
        else{  
                {
                    
                    dfs(i+1);
                    dfs(i+2);
                }
            }
    }
    
    }
    int main()
    {
        int m;
        cin>>n;
        cin>>m;
        for(int i=1;i<=m;i++)
        {
            cin>>a[i];
            b[a[i]]=1;
        }
        dfs(1);
        cout<<ans;
        return 0;
    } 
    

      

      

  • 相关阅读:
    go通道小案例
    go执行cmd命令并获取输出内容
    vue快速生成二维码
    vue.js数字简化 万转化k显示
    uniapp实现小程序获取用户信息
    实现图片预加载功能
    C# MD5加密字符串方法
    一个封装的 HttpClientHelper
    简易通过队列存储并异步打日志实现
    变量
  • 原文地址:https://www.cnblogs.com/jweie/p/8372238.html
Copyright © 2011-2022 走看看