时间限制: 1 Sec 内存限制: 64 MB
题目描述
Redraiment小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去。 但年幼的他一次只能走上一阶或者一下子蹦上两阶。 现在一共有N阶台阶,请你计算一下Redraiment从第0阶到第N阶共有几种走法。
输入
输入包括多组数据。 每组数据包括一行:N(1≤N≤40)。 输入以0结束。
输出
对应每个输入包括一个输出。 为redraiment到达第n阶不同走法的数量。
样例输入
120
样例输出
12
提示
来源
无情dp;记忆化dfs仍可。
#include <bits/stdc++.h>
#define cl(x) memset(x,0,sizeof(x))
#define _cl(a,b) memset(a,0,(b+1)<<2)
#define At(x,y) memset(x,y,sizeof x)
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define drep(i,a,b) for(int i=a;i>=b;i--)
#define ll long long
#define pb push_back
#define vct vector
#define pq priority_queue
#define all(x) x.begin(),x.end()
#define int long long
#define fi first
#define se second
//#pragma GCC optimize(2)
using namespace std;
inline int min(int a,int b) {return a<b?a:b;}
inline int max(int a,int b) {return a>b?a:b;}
//map<string,map<string,int> > mp;
//pq <ll,vct<ll>,less<ll> > now,last;
//vct<vct<int> > vt(n+1,vct<int>(m+1,0))
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const ll mod=1e9+7;
const int MOD=998244353;
const int N=1e2+10;
int n,m;
int dp[N];
void solve()
{
dp[1]=1,dp[2]=2;
for(int i=3;i<=100;i++) dp[i]=dp[i-1]+dp[i-2];
while(cin>>n&&n){
cout<<dp[n]<<"\n";
}
return ;
}
signed main()
{
// srand(time(NULL));
// freopen("2022_XinShengSai_1.in", "r", stdin);
// freopen("2022_XinShengSai_1.out", "w", stdout);
// ios::sync_with_stdio(false);
// cin.tie(0); cout.tie(0);
int t;
// cin>>t;
t=1;
while(t--)
solve();
return 0;
}
/*
*/