【第20题】AC掉[SHOI2002] 滑雪,10点可以去看综艺

2023-08-31 14:14:10 浏览数 (1)

碎碎念

开始复习记忆化搜索,本道题一上来就有思路,可调试一直很不顺利,花了2.5个小时,终于还是把他摆平了。

明天开始备战,要调整节奏,加油!

别再犯低级错误,别再犯低级错误,别再犯低级错误,重要的事多了3遍,我记得住的。

今天老码农给我放了假,10点前就可以去看我的综艺了。

题目

题目原文请移步下面的链接

  • https://www.luogu.com.cn/problem/P1434
    • 参考题解:https://www.luogu.com.cn/problem/solution/P1434
  • 标签:搜索记忆化搜索

题解

  • 题解大家可移步看这里,很多童鞋写了各种解法
    • https://www.luogu.com.cn/problem/solution/P1434
代码
代码语言:javascript复制
#include <bits/stdc  .h>

using namespace std;
#define endl 'n';

int g[101][101];
int ms[101][101];


int dfs(int a, int b, int r, int c) {
    if (ms[a][b] != 0) {
        return ms[a][b];
    }
    if (a - 1 >= 0 && g[a - 1][b] < g[a][b]) {
        ms[a][b] = max(ms[a][b], dfs(a - 1, b, r, c)   1);
    }
    if (b - 1 >= 0 && g[a][b - 1] < g[a][b]) {
        ms[a][b] = max(ms[a][b], dfs(a, b - 1, r, c)   1);
    }
    if (a   1 < r && g[a   1][b] < g[a][b]) {
        ms[a][b] = max(ms[a][b], dfs(a   1, b, r, c)   1);
    }
    if (b   1 < c && g[a][b   1] < g[a][b]) {
        ms[a][b] = max(ms[a][b], dfs(a, b   1, r, c)   1);
    }
    ms[a][b] ? ms[a][b] : ms[a][b] = 1;
    return ms[a][b];
}

void best_coder() {
    int r, c;
    scanf("%d%d", &r, &c);
    for (int i = 0; i < r;   i) {
        for (int j = 0; j < c;   j) {
            scanf("%d", &g[i][j]);
        }
    }
    int ans = 0;
    ms[0][0] = 1;
    for (int i = 0; i < r;   i) {
        for (int j = 0; j < c;   j) {
            ans = max(ans, dfs(i, j, r, c));
        }
    }
    printf("%d", ans);
}


void happy_coder() {
}

int main() {
    // 提升cin、cout效率
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    // 小码匠
    best_coder();

    // 最优解
    // happy_coder();

    // 返回
    return 0;
}

END

0 人点赞