链接:
https://www.nowcoder.com/acm/contest/90/A
来源:牛客网
来源:牛客网
题目描述
小明在坐景驰科技研发的无人车到达了目的地。
景驰科技(JingChi.ai)是一家由人工智能技术驱动、以无人驾驶技术为核心的智能出行公司。它将打造面向中国市场的全无人驾驶。
从无人车下来以后,小明看到了一个长长的楼梯。
有一个n级台阶的楼梯,小明一次可以向上跳1步,两步,甚至是n步,请问小明跳到n级台阶有多少种跳法?
输入描述:
第一行输入一个整数t,代表有t组样例:( T<=30) 接下来的t行,都用一个整数n,表示楼梯有n级台阶( 1<=n<=30)
输出描述:
输出跳到第n级台阶有多少种跳法
输入
1 1输出
1开始我是这么做的后来找到规律#include <bits/stdc++.h> using namespace std; int dp[100][100]; int main() { int T,n; cin>>T; while(T--) { memset(dp,0,sizeof(dp)); cin>>n; dp[0][0]=1; for(int i=1;i<=n;i++) {dp[i][1]=1; for(int j=2;j<=i;j++) { for(int k=i-j;k<i;k++) { if(k>j-1) dp[i][j]=dp[k][j-1]+dp[i][j]; else dp[i][j]=dp[k][k]+dp[i][j]; } } } cout<<dp[n][n]<<endl; } }
#include <bits/stdc++.h> using namespace std; int mi(int a,int b) { int ans=1; for(int i=0;i<b;i++) { ans=ans*a; } return ans; } int main() { int T,n; cin>>T; while(T--) { cin>>n; cout<<mi(2,n-1)<<endl; } return 0; }
再后来发现可以把第一种解法化简
#include <bits/stdc++.h> using namespace std; int p[100]; int main() { int T,n; cin>>T; while(T--) { memset(p,0,sizeof(p)); cin>>n; p[0]=1; for(int i=1;i<=n;i++) { for(int j=0;j<i;j++) { p[i]=p[i]+p[j]; } } cout<<p[n]<<endl; } return 0; }