20pts求调,玄关
查看原帖
20pts求调,玄关
1404097
timestimes_2022楼主2025/7/22 13:15

RT,代码如下

#include <bits/stdc++.h>
using namespace std;
#define INF INT_MIN
struct note{
    int v,x,y;
}a[10005];
bool cmp(note a,note b)
{
    return a.v < b.v;
}
int R,C,f[105][105],nx,ny,ans = INT_MIN,b[105][105];
int main()
{
    cin >> R >> C;
    for(int j = 1;j <= C;j++)
    {
        f[0][j] = f[R + 1][j] = INF;
    }
    for(int i = 1;i <= R;i++)
    {
        f[i][0] = INF;
        f[i][C + 1] = INF;
        for(int j = 1;j <= C;j++)
        {
            nx = (i - 1) * C + j - 1;
            cin >> a[nx].v;
            a[nx].y = i;
            a[nx].x = j;
            f[i][j] = INF;
            b[i][j] = a[nx].v;
        }
    }
    sort(a + 1,a + R * C + 1,cmp);
    f[a[1].x][a[1].y] = 1;
    for(int i = 2;i <= R * C;i++)
    {
        nx = a[i].x;
        ny = a[i].y;
        // f[nx][ny] = max(f[nx - 1][ny],max(f[nx + 1][ny],max(f[nx][ny - 1],f[nx][ny + 1])));
        if(b[nx][ny] > b[nx - 1][ny])
        {
            f[nx][ny] = max(f[nx][ny], f[nx - 1][ny] + 1);
        }
        if(b[nx][ny] > b[nx][ny - 1])
        {
            f[nx][ny] = max(f[nx][ny], f[nx][ny - 1] + 1);
        }
        if(b[nx][ny] > b[nx + 1][ny])
        {
            f[nx][ny] = max(f[nx][ny], f[nx + 1][ny] + 1);
        }
        if(b[nx][ny] > b[nx][ny + 1])
        {
            f[nx][ny] = max(f[nx][ny], f[nx][ny + 1] + 1);
        }
        if(f[nx][ny] == INF)
        {
            f[nx][ny] = 1;
        }
        ans = max(f[nx][ny],ans);
    }
    cout << ans;
    return 0;
}
2025/7/22 13:15
加载中...