四个点re求助大佬

P1434 [SHOI2002] 滑雪

老黎 @ 2019-05-01 14:24:44

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int r,c,a[105][105],b[105][105],movei[4]={1,0,0,-1},movej[4]={0,1,-1,0};
struct p{
    int x,y,h;
}que[10500];
bool cmp(p a,p b){
    return a.h<=b.h;
}
int main(){
    scanf("%d%d",&r,&c);
    int k=1;
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++,k++){
            scanf("%d",&a[i][j]);
            b[i][j]=1;
            que[k].x=i;que[k].y=j;que[k].h=a[i][j];
        }
    }
    sort(que,que+k,cmp);
    for(int t=1;t<k;t++){
        for(int i=0;i<4;i++){
            int xi=que[t].x+movei[i],yi=que[t].y+movej[i];
            if(xi>0&&xi<=r&&yi>0&&yi<=c){
                if(a[xi][yi]>que[t].h){
                    b[xi][yi]=max(b[xi][yi],b[que[t].x][que[t].y]+1);
                }
            }
        }
    }
    int maxn=0;
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            maxn=max(maxn,b[i][j]);
        }
    }
    printf("%d",maxn);
    return 0;
}

|