为什么样例都过不了?
查看原帖
为什么样例都过不了?
1031931
14425aab楼主2024/5/30 10:11
#include<iostream>
#include<cmath>
#include<algorithm>

using namespace std;

const int N = 1e5;

int r,c,n;

int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};

struct node
{
    int x,y,h;
    friend bool operator<(node a,node b)
    {
        return a.h<b.h;
    }
}a[N];

int f[150][150],h[120][120];

bool ok(int x,int y)
{
    if(x<=0||x>r||y<=0||y>c) return false;
    return true;
}

int main()
{
    cin>>r>>c;
    for(int i=1;i<=r;i++)
    {
        for(int j=1;j<=c;j++)
        {
            a[n].x=i;
            a[n].y=j;
            cin>>h[i][j];
            a[n].h=h[i][j];
            n++;
        }
    }
    sort(a,a+n);
    for(int i=1;i<=120;i++)
    {
        for(int j=1;j<=120;j++)
        {
            f[i][j]=1;
        }
    }
    for(int i=1;i<n;i++)
    {
        for(int j=0;j<4;j++)
        {
            int x1=a[i].x+dx[j];
            int y1=a[i].y+dy[j];
            if(ok(x1,y1))
            {
                if(h[x1][y1]>a[i].h)
                {
                    f[x1][y1]=max(f[x1][y1],1+f[a[i].x][a[i].y]);
                }
            }
        }
    }
    int pos=-1;
    for(int i=1;i<=r;i++)
    {
        for(int j=1;j<=c;j++)
        {
            pos=max(pos,f[i][j]);
        }
    }
    cout<<pos<<endl;
    return 0;
}
2024/5/30 10:11
加载中...