对样例输出1?

P1434 [SHOI2002] 滑雪

幽灵特工 @ 2020-09-08 20:46:13

#include <bits/stdc++.h>
using namespace std;

int r,c;
int x[102][102]={0};
int visit[102][102]={0};
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int ans=-1;

int dfs(int a,int b){
    if(visit[a][b])return visit[a][b];
    visit[a][b]=1;
    for(int i=0;i<4;i++){
        int xx=a+dx[i];
        int yy=b+dy[i];
        if(x[xx]&&x[yy]&&x[a]>x[xx]&&x[b]>x[yy]){
            dfs(xx,yy);
            visit[a][b]=max(visit[a][b],visit[xx][yy]+1);
        }
    }
    return visit[a][b];
}
int main(){
    cin>>r>>c;
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            cin>>x[i][j];
        }
    }
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            ans=max(ans,dfs(i,j));
        }
    }
    cout<<ans;
}

by do_while_true @ 2020-09-08 20:50:53

@幽灵特工

        if(x[xx]&&x[yy]&&x[a]>x[xx]&&x[b]>x[yy]){
            dfs(xx,yy);
            visit[a][b]=max(visit[a][b],visit[xx][yy]+1);
        }

这个 if 里面的判断有问题叭qwq


by konjacq @ 2020-09-08 20:52:07

@幽灵特工

if(x[xx]&&x[yy]&&x[a]>x[xx]&&x[b]>x[yy]){

应该是这里,改成

if(x[xx][yy]<x[a][b]){

by 幽灵特工 @ 2020-09-08 20:55:37

@konjacq 谢谢,问题解决了! 但是仍有两个测试点WA,能帮我详细看看吗?


by konjacq @ 2020-09-08 21:08:37

@幽灵特工 说不定会有高度为0的点,不能用if(x[xx][yy]&&,换种方法判边界


by 幽灵特工 @ 2020-09-08 21:19:04

@konjacq 好的,我AC了。谢谢!


|