动态规划的正确打开
跳台阶
题目描述:
一个楼梯共有n级台阶,每次可以走一级或者两级,问从第0级台阶到第n级台阶一共有多少种方案。
输入格式:
共一行,包含一个整数n。
输出格式:
共一行,包含一个整数,表示方案数。
数据范围:
1≤n≤15
输入样例:
5
输出样例:
8
dfs的code:
#include<iostream>
using namespace std;
int n;
int dfs(int x){
if(x==1) return 1;
if(x==2) return 2;
else return dfs(x-1)+dfs(x-2);
}
int main(){
cin>>n;
int res=dfs(n);
cout<<res<<endl;
return 0;
}
记忆化搜索的code:
#include<iostream>
using namespace std;
int n;
int mem[100];
int dfs(int x){
if(mem[x]) return mem[x];
int sum=0;
if(x==1) sum=1;
else if(x==2) sum=2;
else sum=dfs(x-1)+dfs(x-2);
mem[x]=sum;
return sum;
}
int main(){
cin>>n;
int res=dfs(n);
cout<<res<<endl;
return 0;
}
递推的code:
#include <iostream>
using namespace std;
int main(){
int n;
int f[20];
cin>>n;
f[0]=1;
for(int i=1;i<=n;i++){
f[i]=f[i-1]+f[i-2];
}
cout<<f[n-1];
return 0;
}