6 条题解
-
2
#include<bits/stdc++.h> using namespace std; int main() { int a[25][25],m,n; for(int i=1;i<=20;i++){ for(int j=1;j<=20;j++){ if(i==1||j==1){ a[i][j]=1; } } }for(int i=2;i<=20;i++){ for(int j=2;j<=20;j++){ a[i][j]=a[i][j-1]+a[i-1][j]; } }cin>>m>>n; cout<<a[m][n]; return 0; }重点画图找公式,每个点的路线等于左边的点的路线加上下面的点的路线和
-
1
57、移动路线(广赋张老师的题解)
#include <iostream> #include <vector> using namespace std; int main() { int m, n; cin >> m >> n; long long f[21][21];// 创建递推数组,大小为 (m+1)×(n+1) /* 解题思路:根据下面规律采用递推法,计算出到达某个位置可能的路线数 1 5 15 35 70 126 210 330 1 4 10 20 35 56 84 120 1 3 6 10 15 21 28 36 1 2 3 4 5 6 7 8 1 1 1 1 1 1 1 1 */ for (int i = 1; i <= m; i++) {f[i][1] = 1;} // 第一列初始为1 for (int j = 1; j <= n; j++) {f[1][j] = 1;} // 第一行初始为1 // 到达某个位置可能的路线数 = 下面的路线数+左边的路线数 for (int i = 2; i <= m; i++) { for (int j = 2; j <= n; j++) { f[i][j] = f[i-1][j] + f[i][j-1]; //cout<<f[i][j]<<" ";//输出查看过程 } //cout<<endl;//输出查看过程 } cout << f[m][n] << endl; return 0; } -
-4
#include<bits/stdc++.h> using namespace std;
int main() { ios::sync_with_stdio(false); cin.tie(0); int m, n; cin >> m >> n; long long a[21][21] = {0}; a[1][1] = 1; for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { if (i == 1 && j == 1) continue; a[i][j] = a[i-1][j] + a[i][j-1]; } } cout << a[m][n] << "\n"; return 0; }
-
-6
- 1
信息
- ID
- 57
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 43
- 已通过
- 24
- 上传者