6 条题解

  • 3
    @ 2026-2-11 9:53:41

    学过小学奥数的都知道每个点的路径有多少种,所以递推式很容易就能写出来:

    递推公式:C(x,y)=C(x,y1)+C(x1,y)C(x,y)=C(x,y-1)+C(x-1,y)

    因为蚂蚁只能向上或向右走,所以只向右或上只有唯一的路径,递推边界就能知道:

    递推边界: 1.C(x,x)=1; //只向上 2.C(x,0)=1; //只向右

    • 2
      @ 2026-2-11 11:04:40
      #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
        @ 2026-2-12 8:47:42

        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;
        }
        
        • 1
          @ 2026-2-11 9:58:28
          #include<bits/stdc++.h> 
          using namespace std;
          int main(){ 
          	int x,y; 
          	cin>>x>>y; 
          	long long a[21][21 ={0}; 
          	a[1][1]=1; 
          	for (int i=1;i<=x;i++) { 
          		for (int j=1;j<=y;j++) { 
          			if(i==1&&j==1) continue; 
          		a[i][j]=a[i-1][j]+a[i][j-1]; 
          		} 
          	} 
          	cout<<a[x][y]; 
          	return 0; 
          }
          
          
          • -4
            @ 2026-2-11 9:51:25

            #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
            @ 2026-2-11 9:48:22
            #include<bits/stdc++.h> 
            using namespace std;
            long long k[100][100];
            int m , n;
            int main(){
                for(int i=1 ; i<=30 ; i++){
                    k[1][i]=1;
                    k[i][1]=1;
                }
                for(int i=2 ; i<=20 ; i++){
                    for(int j=2 ; j<=20 ; j++){
                        k[i][j]=k[i-1][j]+k[i][j-1];
                    }
                }
                cin>>m >>n;
                cout<<k[m][n];
                
            
            	return 0;
            }
            

            错了别给我点差评

            • @ 2026-2-11 9:59:52

              给点好评!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

          • 1

          信息

          ID
          57
          时间
          1000ms
          内存
          256MiB
          难度
          3
          标签
          递交数
          43
          已通过
          24
          上传者