爬楼梯(1)
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
分析:逆向思维,当你想要爬到第n阶楼梯时,你可以通过第n-1阶楼梯 走一步 到达 ,也可以通过第n-2阶楼梯 一下爬两步到达,所有到达第n阶的方法数目就是 到达n-1阶的方法加上能到达n-2阶的方法
dp[n]=dp[n-1]++dp[n-2];
#include<iostream>
using namespace std;
int dp[100];//表示走到第i层台阶需要的方法数
int main() {
int n;
cin >> n;
dp[0] = 1; dp[1] = 1;
for (int i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
cout << dp[i] << endl;
}
return 0;
}
爬楼梯(2 )
#include<iostream>
using namespace std;
int dp[100];
int main() {
int n;
cin >> n;
dp[0] = 1;
for (int i = 1; i <= n; i++) {
dp[i] = 0;
for (int j = i - 1; j >= 0; j -= 2) {//奇数1,3,5,7,9.。。。所有从j-1开始算起
dp[i] += dp[j];//把每次得到的dp[1],dp[3],dp[7]的值实现累加
}
cout << "dp " << i << ":" << dp[i] << endl;
}
return 0;
}