1 条题解

  • 0
    @ 2024-9-20 23:23:35

    (1,1)(1,1)(n,m)(n,m),直接双层循环。我们计算 (1,1)(1,1)(i,j)(i,j) 的最大距离和,因为只能向右或向下移动,所以 fi,j=max(fi1,j,fi,j1)+ai,jf_{i,j} = \max(f_{i-1,j}, f_{i,j-1}) + a_{i,j},最终迭代得到的 fn,mf_{n,m}即为答案

    #include <bits/stdc++.h>
    typedef long long ll;
    ll a[1100][1100];
    int main()
    {
        int n, m;
        std::cin >> n >> m;
        for (int i = 1; i <= n; i ++) {
            for (int j = 1; j <= m; j ++) {
                std::cin >> a[i][j];
            }
        }
        // 先预处理第一行和第一列的数据,处理边界情况
        // 第一行
        for (int i = 1; i <= m; i ++) a[1][i] += a[1][i-1];
        // 第一列
        for (int i = 1; i <= n; i ++) a[i][1] += a[i-1][1];
            
        for (int i = 2; i <= n; i ++) {
            for (int j = 2; j <= m; j ++) {
                a[i][j] = a[i][j] + std::max(a[i-1][j], a[i][j-1]);
            }
        }
        std::cout << a[n][m] << std::endl;
        return 0;
    }
    
    • 1

    信息

    ID
    106
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    25
    已通过
    16
    上传者