zoukankan      html  css  js  c++  java
  • 第39级台阶|2013年蓝桥杯B组题解析第三题-fishers

    第39级台阶

    小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!

    站在台阶前,他突然又想着一个问题:
    如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
    请你利用计算机的优势,帮助小明寻找答案。

    答案:51167078

    思路:数据很小,可以用递归直接做(每一次都可以走1步、或者走2步),也不用缓存数据。时间复杂度:2^39 O(2^n)

    如果数据更大,可以用记忆化递归优化

    #include<iostream>
    using namespace std;
    
    long ans = 0;
    int a[100];
    
    void dfs(int step,int flag,int k){
    	if(step == 0 && flag % 2 == 0){
    		ans++;
    		for(int i=0;i<=k-1;i++){
    			cout<<a[i]<<" ";
    		}
    		cout<<endl;
    		return;
    	}
    	if(step < 0){
    		return;
    	}
    	
    	if(step >= 1){
    		a[k] = 1;
    		dfs(step - 1,!flag,k+1);
    		a[k] = 0;
    	}
    	if(step >=2){
    		a[k] = 2;
    		dfs(step-2,!flag,k+1);
    		a[k] = 0;
    	}
    }
    
    
    int main(){
    	dfs(39,0,0);
    	cout<<ans<<endl;
    	return 0;
    } 
    
  • 相关阅读:
    解决依赖的moduleBuildConfig.DEBUG总是未false的问题
    android异步处理机制
    Android 5.0 行为变更
    Android 6.0 变更
    Android 7.0 行为变更
    android 8.0变更
    Android 4.4 API
    Android常见问题集锦
    Android笔记汇总目录
    Delphi中Indy 10的安装和老版本的卸载
  • 原文地址:https://www.cnblogs.com/fisherss/p/10326131.html
Copyright © 2011-2022 走看看