1. 程式人生 > >洛谷——P1255 數樓梯

洛谷——P1255 數樓梯

color class std algo nbsp 多少 getc mes ring

題目描述

樓梯有N階,上樓可以一步上一階,也可以一步上二階。

編一個程序,計算共有多少種不同的走法。

輸入輸出格式

輸入格式:

一個數字,樓梯數。

輸出格式:

走的方式幾種。

輸入輸出樣例

輸入樣例#1:
4
輸出樣例#1:
5

說明

用遞歸會太慢,需用遞推

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

也是曾經做過的一道題,單純復習一下高精斐波那契模板

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include
<algorithm> #define N 5001 using namespace std; int n,f[N][N]={0},len[N]={0}; int read() { int x=0,f=1; char ch=getchar(); while(ch<0||ch>9){if(ch==-)f=-1; ch=getchar();} while(ch>=0&&ch<=9){x=x*10+ch-0; ch=getchar();} return x*f; } int fei(int
a,int b,int c) { for(int i=1;i<=max(len[b],len[c]);i++) { f[a][i]+=f[b][i]+f[c][i]; if(f[a][i]>9) { f[a][i+1]=f[a][i]/10; f[a][i]=f[a][i]%10; len[a]=max(len[a],i+1); } else len[a]=max(len[a],i); } }
int main() { n=read(); f[1][1]=1,f[2][1]=2,len[0]=1,len[1]=1; for(int i=3;i<=n;i++) fei(i,i-1,i-2); for(int i=len[n];i>=1;i--) printf("%d",f[n][i]); return 0; }

洛谷——P1255 數樓梯