幽灵特工 @ 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
@幽灵特工 说不定会有高度为if(x[xx][yy]&&
,换种方法判边界
by 幽灵特工 @ 2020-09-08 21:19:04
@konjacq 好的,我AC了。谢谢!