30分求助

P1434 [SHOI2002] 滑雪

LaoXu666 @ 2023-02-11 11:04:15

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
int cnt=0,maxcnt=0x8000000000000000;
int h[105][105],r,c;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,-1,1};
void dfs(int x,int y){
    cnt++;
    //bool flag=false;
    for(int i=0;i<4;i++){
        int xx=x+dx[i];
        int yy=y+dy[i];
        if(xx>0 && yy>0 && xx<r && yy<c && h[xx][yy]<h[x][y]){
            //flag=true;    
            dfs(xx,yy);
            cnt--;
        }
        else{
            if(cnt>maxcnt){
                maxcnt=cnt;
                //return;
            }
        }
    }
}
signed main(){
    //;
    cin>>r>>c;
    for(int i=0;i<r;i++){
        for(int j=0;j<c;j++){
            cin>>h[r][c];
        }
    }
    for(int i=0;i<r;i++){
        for(int j=0;j<c;j++){
            dfs(i,j);
        }
    }
    cout<<maxcnt;
}

第2、3、4点AC,其他WA


by A_Learning_Hornet @ 2023-02-11 12:27:24

看一下我这个,评测了,100分AC。


#include<bits/stdc++.h>
using namespace std;int x[5]={0,-1,0,1,0},y[5]={0,0,1,0,-1},r,c,i,j,p,t,n=0,m[101][101],f[101][101];int se(int,int);
int main(){
    cin>>r>>c;
    for(i=1;i<=r;i++)
        for(j=1;j<=c;j++)
            cin>>m[i][j];
    for(i=1;i<=r;i++)
        for(j=1;j<=c;j++){
            t=se(i,j);f[i][j]=t;
            if(t>n)n=t;
        }
    cout<<n;
}
int se(int l,int k){
    int i,t=1,e,b,d;
    if(f[l][k]>0)return(f[l][k]);
    for(i=1;i<=4;i++){
        b=l+x[i];d=k+y[i];
        if((b>0)&&(b<=r)&&(d>0)&&(d<=c)&&(m[l][k]<m[b][d])){
            e=se(b,d)+1;
            if(e>t)t=e;
        }
    }
    f[l][k]=t;
    return t;
}

|