1 条题解

  • 1
    @ 2023-6-5 6:24:22

    C++

    这道题只要理解了就很容易可以知道

    飞船只能向下和向右走,所以

    每个点的路径数就是上面和左边点路径数之和

    若有敌机,此点的路径就是0

    只要用两张图,一张存敌机的位置,一张存每个点的路径数

    接下来写两条for循环来算就行了

    //Florance
    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    
    int a[110][110]; //存图
    int b[110][110]; //存每个点的路径数
    
    signed main() {
        int n, m;
        cin >> n >> m;
        for(int i = 1; i <= m; i++) { //读图,要注意的是给出的是x\*y的图
            for(int j = 1; j <= n; j++) { //读入时应当按y\*x读入
                cin >> a[i][j];
            }
        }
    
        for(int i = 1; i <= m; i++) { //算路径
            for(int j = 1; j <= n; j++) {
                if(i == 1 and j == 1) b[i][j] = 1; //起始点b[1][1]一定为1
                else b[i][j] = b[i - 1][j] + b[i][j - 1];
                if(a[i][j] == 1) { //如果此点有敌人,路径数为0
                    b[i][j] = 0;
                }
            }
        }
    
        // for(int i = 1; i <= m; i++) { //调试输出图b
            // for(int j = 1; j <= n; j++) {
                // cout << b[i][j] << ' ';
            // }
            // cout << '\\n';
        // }
        if(b[m][n] == 0) cout << "NO!!!";
        else cout << b[m][n]; //答案就是点b[n][m]的路径数
        return 0;
    }
    
    • @ 2023-6-5 11:46:05

      建议你重新看一下你的题目里面的n,m,x,y都代表什么东西()

    • @ 2023-6-5 12:11:52

      @ 抱歉,已改

  • 1

信息

ID
854
时间
1000ms
内存
256MiB
难度
7
标签
递交数
19
已通过
7
上传者