1 条题解

  • 0
    @ 2025-8-24 21:17:22

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar ew3www
    homework不可数说明了什么

    搬运于2025-08-24 21:17:21,当前版本为作者最后更新于2025-03-23 18:13:26,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    分析

    本题为没有任何难度的水题,先造出数据,然后直接按题意爆搜,遍历每一条值严格递增的路径,打擂台取最大值即可。 (同名题目,但难度天差地别)

    Code

    #include <bits/stdc++.h>
    using namespace std;
    int n, m, s;
    int a[110][110];
    int maxn = -1, maxx = -1;
    void dfs(int x, int y, int ans) {
        maxn = max(maxn, ans); // 打擂台取最大值
        if(a[x+1][y] > a[x][y]) {
            dfs(x+1, y, ans + a[x+1][y]);
        }
        if(a[x][y+1] > a[x][y]) {
            dfs(x, y+1, ans + a[x][y+1]);
        }
        if(a[x-1][y] > a[x][y]) {
            dfs(x-1, y, ans + a[x-1][y]);
        }
        if(a[x][y-1] > a[x][y]) {
            dfs(x, y-1, ans + a[x][y-1]);
        }
    }
    int main() {
        scanf("%d%d%d", &n, &m, &s);
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                s = (s * 345) % 19997;
                a[i][j] = s % 10 + 1;
            }
        } // 生成数据
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                dfs(i, j, a[i][j]); // 爆搜
                maxx = max(maxn, maxx);
                /* 这里需要注意!!!
                 * 每一次爆搜取得的是从当前位置开始的最优解
                 * 而不是全局最优解
                 * 所以需要每爆搜一遍就更新答案
                 */
                maxn = -1;
            }
        }
        printf("%d", maxx);
        return 0;
    }
    

    AC 记录

    • 1

    信息

    ID
    8629
    时间
    1000ms
    内存
    512MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者