HDU - 超级楼梯
http://acm.hdu.edu.cn/showproblem.php?pid=2041
题意:有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
题解:手推前5项,发现是1,2,3,5,8 , 那么可以猜测是斐波那契数列的衍生,也就是 num[ i ] = num[ i-1 ] + num[ i - 2 ] 。
#include <stdio.h> #include <cstring> #include <algorithm> #include <vector> #include <map> #include <assert.h> #include <set> #include <cmath> #include <queue> #include <cstdlib> #include <iostream> #include <bitset> #define pii pair<int,int> #define fi first #define se second #define pb push_back using namespace std; typedef long long ll; const int mxn = 1e2+5; ll n,m,k,t,dp[mxn],a[mxn]; int main() { for(int i=1;i<55;i++) dp[i] = i<=3 ? i : dp[i-1]+dp[i-2] ; cin>>t; while(t--) { cin>>n; cout<<dp[n-1]<<endl; } return 0 ; }
所遇皆星河