AcWing 821. 跳台阶
原题链接
简单
作者:
轩._5
,
2024-10-29 16:53:42
,
所有人可见
,
阅读 1
#include<iostream>
using namespace std;
const int N = 1000;
int ret, n;
int mem[N], f[N];
//自下而上
// void dfs(int now){
// if(now > n) return;
// if(now == n){
// ret++;
// return;
// }
// dfs(now + 1);
// dfs(now + 2);
// }
//深搜 自上而下
// int dfs(int now){
// if(now == 1) return 1;
// if(now == 2) return 2;
// return dfs(now - 1) + dfs(now - 2);
// }
//记忆化搜索
// int dfs(int now){
// if(mem[now]) return mem[now];
// int sum = 0;
// if(now == 1) sum = 1;
// else if(now == 2) sum = 2;
// else{
// sum = dfs(now - 1) + dfs(now - 2);
// }
// mem[now] = sum;
// return mem[now];
// }
int main(){
cin >> n;
// dfs(0);
// cout << ret << endl;
//cout << dfs(n) << endl;
//dp
// f[1] = 1;
// f[2] = 2;
// for(int i = 3; i <= n; i++){
// f[i] = f[i - 1] + f[i - 2];
// }
//cout << f[n] << endl;
//dp优化空间
if(n == 1 || n == 2){
cout << n;
return 0;
}
int newf = 0, tmp1 = 1, tmp2 = 2;
for(int i = 3; i <= n; i++){
newf = tmp1 + tmp2;
tmp1 = tmp2;
tmp2 = newf;
}
cout << newf << endl;
return 0;
}