P1255 数楼梯

P1255 数楼梯

题目描述

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

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

输入格式

一个数字,楼梯数。

输出格式

输出走的方式总数。

输入输出样例 #1

输入 #1

复制代码
4

输出 #1

复制代码
5

说明/提示

  • 对于 60%60\%60% 的数据,N≤50N \leq 50N≤50;
  • 对于 100%100\%100% 的数据,1≤N≤50001 \le N \leq 50001≤N≤5000。
cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;	// 严格要求 (将long long 类型取别名为ll)

string dp[10100];

string func(string s1, string s2){
	string s3;
	ll a[10010] = {0};
	reverse(s1.begin(), s1.end());
	reverse(s2.begin(), s2.end());
	
	ll d1 = s1.size(), d2 = s2.size(), d = max(d1, d2);	//d为加一起和的最大下标(注意下标从0开始) 
	for(ll i = d1; i <= d; i++) s1 += '0';
	for(ll i = d2; i <= d; i++) s2 += '0';
	
	ll cnt = 0;
	for(ll i = 0; i <= d; i++){
		ll x1 = s1[i] - '0', x2 = s2[i] - '0', x = x1 + x2 + cnt;
		a[i] = x % 10;
		cnt = x / 10;
	}
	while(a[d] == 0){
		d--;
	}
	for(ll i = d; i >= 0; i--){	
		s3 += char(a[i] + '0');
	}
	return s3;
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	ll n;
	cin >> n;
	dp[1] = "1";
	dp[2] = "2";
	
	for(ll i = 3; i <= n; i++){
		dp[i] = func(dp[i - 1], dp[i - 2]);
//		cout << dp[i] << endl;
	}
	cout << dp[n] << endl;
	return 0;
}
相关推荐
世人万千丶1 小时前
鸿蒙Flutter Flex多子组件权重分配
学习·flutter·华为·harmonyos·鸿蒙
GuWenyue1 小时前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
优橙教育1 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
同勉共进2 小时前
记一例 vibe coding + gcc bug 导致的线程池死锁问题
c++·线程池·gcc·死锁·vibe coding
我叫洋洋3 小时前
C ++ [ hello world ]
c语言·c++·算法
SeaTunnel3 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影3 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
圣光SG4 小时前
Servlet学习笔记
笔记·学习·servlet
奋发向前wcx4 小时前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
Marst Code4 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python