洛谷P1255 数楼梯

这是一篇关于洛谷P1255题目的博客,讨论如何计算不同上楼梯方式的总数。由于数据规模可能达到5000,超过了C++中`unsigned long long`的最大存储值,因此需要采用高精度加法。博主提出此问题可以用斐波那契数列的递推公式f[i] = f[i-1] + f[i-2]来解决,适用于Python和Java等可以处理大整数的语言。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶。

编一个程序,计算共有多少种不同的走法。

说明

(60% N<=50 ,100% N<=5000)

题目解析

这边特意将题目中的数据规模写出来,对于60%的数据是小于50,但是对于100%的数据是小于5000,这边就是考虑到C++中的unsigned long long 是否可以存储这个大的数据量了,显然是存不了的,所以在这边我们需要用到高精度加法(使用python和java的忽略这个问题,java有大整数,python无视存储位数)

首先这道题扫一遍就知道是斐波那契数列的解法,我们可以先找一下递推公式。

如果N=1,只有一种走法
如果N=2,由两种走法,分别是1,1、2
如果N=3,由三种走法,分别是1,1,1、1,2、2,1
如果N=4,由五种走法,分别是1,1,1,1、1,2,1、1,1,2、2,1,1,2,2

至此,可以得到递推公式为f[i] = f[i-1] + f[i-2]。

代码实现

#include <iostream>
#include <string>
#include <cstring>
#define maxn 5005
using namespace std;

int a[maxn],b[maxn],c[m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值