• 第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;
    } 
    
  • 相关阅读:
    firewalld防火墙
    MariaDB
    if,for,while
    自定义带图标input样式
    display:inline-block 和 float 水平排列区别?
    css中块元素和行内元素区别
    margin-top 为什么会影响父元素的 margin-top
    vertical-align 的理解
    什么是HTTP协议?
    Grunt 自动编译 Less 文件配置
  • 原文地址:https://www.cnblogs.com/fisherss/p/10326131.html
Copyright © 2020-2023  润新知