5 solutions
-
0
#include<bits/stdc++.h> using namespace std; int dp[45]; int m; // m 级楼梯 int n; // 测试数据的个数 // 初始化dp数组,计算1-40级台阶 void InitDp() { dp[1] = 1; // 走上一级台阶只有一种走法 dp[2] = 2; // 走上两级台阶只有两种走法 // 后面的台阶既有可能是跨一级到的,也有可能是通过跨两级到的。因此状态转移方程是a[m]=a[m-1]+a[m-2] for(int i = 3; i <= 40; i++) { dp[i] = dp[i-1]+dp[i-2]; } } int main() { InitDp(); cin >> n; while(n--) { cin >> m; cout << dp[m-1] << endl; // 题上说的是走上m级,所以要走的有m-1级 } return 0; }
-
0
#include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<int>su(n+1); for (int i = 1; i <= n; i++)cin >> su[i]; int way[1001]; way[1] = 0; way[2] = 1; way[3] = 2; for (int i = 1; i <= n; i++) { for (int j = 4; j <= su[i]; j++) way[j] = way[j - 1] + way[j - 2]; cout << way[su[i]] << endl; }
return 0;
}
-
0
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n=sc.nextInt(); //次数为n int[] m=new int[n]; for (int i = 0; i < n; i++) { m[i]=sc.nextInt()-1; } int[][] dp=new int [n][45]; for (int i = 0; i < n; i++) { dp[i][0]=1; dp[i][1]=1; dp[i][2]=2; } for (int i = 0; i < n; i++) { //次数 for (int j = 2; j <= m[i]; j++) { // dp[i][j]=dp[i][j-1]+dp[i][j-2]; } } for (int i = 0; i < n; i++) { System.out.println(dp[i][m[i]]); } } }
- 1
Information
- ID
- 129
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 347
- Accepted
- 136
- Uploaded By