YTU 3240,蓝桥杯:第三十九级台阶

                                                   交给时间来处理


 

3240: 第39级台阶

时间限制: 1 Sec  内存限制: 128 MB
提交: 411  解决: 220
[提交][状态][讨论版][命题人:lyh]

题目描述

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

站在台阶前,他突然又想着一个问题: 

如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢? 

请你利用计算机的优势,帮助小明寻找答案。

输入

输出

 某个整数

来源

曹令鑫 

[提交][状态]

这个题一上来看错了意思,以为和母牛的故事思路一样。但是,wa了之后才发现,让你走偶数步,走完39级台阶。

看懂了之后,还是不会。。。

直接上别人AC的代码了:

递推版

#include<iostream>
using namespace std;
#define LEFT 0
#define RIGHT 1
int f[40][2];
int main()
{
    f[1][LEFT]=1;
    f[1][RIGHT]=0;
    f[2][LEFT]=1;
    f[2][RIGHT]=1;

    for(int i=3;i<=39;i++)
    {
        f[i][LEFT]=f[i-1][RIGHT]+f[i-2][RIGHT];
        f[i][RIGHT]=f[i-1][LEFT]+f[i-2][LEFT];
    }
    cout<<f[39][RIGHT];
    return 0;
}

 

递归版

#include<iostream>
using namespace std;
int count=0;
void fun(int stair,int step)
{	//stari用于表示剩余的楼梯的层数,当等于0时停止递归
	//step是走过的步数,用来判断是否是偶数,是否符合要求
	 if(stair<0)return; 
	 if(stair==0)	//39节楼梯全部走完 
	 {
	 	if(step%2 == 0)count++;
	 	return;
	 } 
	 fun(stair-1,step+1);	//这一步走了一个台阶 
	 fun(stair-2,step+1);	//这一步走了两个台阶 
}
int main()
{
	fun(39,0);
	cout<<count<<endl;
	return 0; 
}

 

 比起母牛的故事,递推版就是分成了左右脚呗。。。

但是,那个递归版,为什么没有时间超限呢?(我觉着,这不应该是39层的分枝吗?2^39次方。。。。)(而且,也没有用记忆化存储)(欢迎大佬来指点)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值