动态规划
N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式。(要求采用非递归)
输入描述:
输入包括一个整数N,(1=N90)。
输出描述:
可能有多组测试数据,对于每组数据, 输出当楼梯阶数是N时的上楼方式个数。
示例1
输入
4
输出
5
#include <iostream>
using namespace std;
//斐波那契数列递归实现
//递归+记忆化 解决递归重复问题
//动态规划 小问题推理大问题
int dp[100];
int Fibonacci2(int n){
dp[1]=1;
dp[2]=2;
for (int i = 3; i <=n; ++i) {
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
int F[100];
int Fibonacci1(int n){
if(F[n]!=-1){
return F[n];
}
//计算之前把结果存起来
if(n==1||n==2){
F[n]=n;
return n;
} else{
F[n]= Fibonacci1(n-1)+ Fibonacci1(n-2);
return F[n];
}
}
//大问题->相似小问题
int Fibonacci(int n){
if(n==1 || n==2){
return n;
} else{
return Fibonacci(n-1)+ Fibonacci(n-2);
}
}
int main() {
for(int i=0;i<100;++i){
F[i]=-1;
}
int n;
while (scanf("%d",&n)!=EOF){
printf("%d\n", Fibonacci2(n));
}
return 0;
}