题目:问题 - 2041 (hdu.edu.cn)
思路:每次只能走一个台阶或两个台阶,那么走到每个台阶所需要的方法应该为前两个台阶方法之和,因此除了边界值(前三个台阶方法为 0 1 2),其他台阶正好符合斐波那契数列。
DP状态转移方程:dp[[ i ] = dp[ i-1 ] + dp[ i-2 ]
#include<iostream>
#define maxsize 40
using namespace std;int* dp;
void solve(int n);int main() {int m, * a;cin >> m;dp = new int[maxsize+1]; /*创建动态数组*/memset(dp, 0, sizeof(dp));solve(maxsize); /*将所有台阶方法计算出来*/a = new int[m + 1];for (int i = 1; i <= m; i++) {cin >> a[i]; }for (int i = 1; i <= m; i++) {cout << dp[a[i]] << endl;}
}void solve(int n) {dp[1] = 0;dp[2] = 1;dp[3] = 2;for (int i = 4; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}
}