第二个点超时求助
查看原帖
第二个点超时求助
359492
BZHZS楼主2021/7/2 22:41
#include <bits/stdc++.h>
#define ll long long
#define yes {puts("Yes");return 0;}
#define no {puts("No");return 0;}
#define BZHZS puts("BZH is a handsome boy.");
using namespace std;

int n, m, ans;
int walk1[] = {1, -1, 0, 0};
int walk2[] = {0, 0, 1, -1};
int a[103][103], rmb[103][103];

void ts (int a, string tt)
{
    cout << tt << ":: " << a << endl;
    system ("pause");
    return;
}

void dfs (int x, int y, int cur)
{
    if (cur < rmb[x][y])
        return;
    rmb[x][y] = cur;
    for (register int i=0; i<=3; i++)
    {
        int tox = x+walk1[i];
        int toy = y+walk2[i];
        if (tox>=1 && tox<=n && toy>=1 && toy<=m && a[tox][toy]<a[x][y])
            dfs (tox, toy, cur+1);
    }
}

int main()
{
    ios:: sync_with_stdio (0);
    //freopen ("BZHZS.in" , "r" , stdin);
    //freopen ("BZHZS.out " , "w" , stdout);

    cin >> n >> m;
    for (register int i=1; i<=n; i++)
        for (register int j=1; j<=m; j++)
            cin >> a[i][j];

    for (register int i=1; i<=n; i++)
        for (register int j=1; j<=m; j++)
            if (rmb[i][j] == 0)
                dfs (i, j, 0);

    for (register int i=1; i<=n; i++)
        for (register int j=1; j<=m; j++)
            ans = max (ans, rmb[i][j]);

    cout << ans+1 << endl;

    return 0;
}

2021/7/2 22:41
加载中...